求助自定义FolderBrowerDialog,SaveFileDialog,OpenFileDialog
求助:需要自定义FolderBrowerDialog,SaveFileDialog,OpenFileDialog对话框,选择文件夹目录结构用DevExpress的TreeList控件,TreeList控件通过DataTable绑定数据,我使用以下代码可以遍历磁盘上的文件夹添加到DataTable里(性能关系并不是一次性全部添加):
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
DataRow dataRow = dataTable.NewRow();
dataRow[TreeColum.KeyField.ToString()] = drive.Name;
dataRow[TreeColum.FolderName.ToString()] = drive.Name;
dataRow[TreeColum.ImageNo.ToString()] = TreeImage.Drive;
dataRow[TreeColum.Ref易做图.ToString()] = false;
// GetFileIcon是通过API得到文件夹的图标
if (!imageList1.Images.ContainsKey(((int)TreeImage.Drive).ToString()))
{
imageList1.Images.Add(((int)TreeImage.Drive).ToString(), GetFileIcon(drive.Name));
}
// 将磁盘添加到DataTable里
dataTable.Rows.Add(dataRow);
// 光驱不能访问,跳过
if (drive.DriveType != DriveType.CDRom)
{
// 遍历磁盘下的文件夹
foreach (string folderName in Directory.EnumerateDirectories(drive.RootDirectory.FullName))
{
DataRow childDataRow = dataTable.NewRow();
childDataRow[TreeColum.KeyField.ToString()] = folderName;
childDataRow[TreeColum.Relative.ToString()] = drive.Name;
childDataRow[TreeColum.FolderName.ToString()] = folderName.Substring(drive.Name.Length, folderName.Length - drive.Name.Length).Replace(":\\", string.Empty);
childDataRow[TreeColum.ImageNo.ToString()] = TreeImage.FolderClose;
childDataRow[TreeColum.Ref易做图.ToString()] = true;
// 继续找图标
if (!imageList1.Images.ContainsKey(((int)TreeImage.FolderClose).ToString()))
{
imageList1.Images.Add(((int)TreeImage.FolderClose).ToString(), GetFileIcon(folderName));
}
// 继续添加
dataTable.Rows.Add(childDataRow);
// 递归添加下一级文件夹,参数1是指定递归1次
this.RegistSubFolder(folderName, dataTable, 1);
}
}
}
但是像FolderBrowerDialog中的一些属性操作却不知道怎么实现,例如①RootFolder(获取或设置从其开始浏览的根文件夹),而如果用DirectoryInfo folderInfo = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)类似的指定根文件,却只包含指定路径下的文件夹,不像Windows标准FolderBrowerDialog那个样子。②SelectedPath(获取或设置用户选定的路径),因为我不是一次性将所有文件夹添加到DataTable中,而TreeList的DataSource是DataTable,所以设定用户选择路径时路径不可能都能在DataTable中找到。该怎么做才好,求助啊求助,难道Windows标准版的那些功能都不好实现吗,Windows标准版的那些功能能否在其他控件上实现? 补充:因为标准版对话框不能实现skin和语言设定,所有不得不自定义。 --------------------编程问答-------------------- 有类似用其他控件自定义的方法也都可以告诉我,谢谢谢谢 --------------------编程问答-------------------- TreeList中第一次只加载磁盘,每当展开时再去去读下一级目录,但是一些属性需要你自己去编码实现,比如访问根级目录,可能需要你逐级往上寻找parent
总之别想着什么都可以轻易得到,自己想办法 --------------------编程问答-------------------- 看这个有帮助没,我没有细看:
http://www.ssware.com/articles/folderbrowserdialog-unmasked-everything-you-wanted-to-know-about-the-folder-browser-component-from-dotnet-framework.htm --------------------编程问答--------------------
顶。 --------------------编程问答--------------------
②SelectedPath(获取或设置用户选定的路径)已经解决了,原来
this.treeList1.FocusedNode = this.treeList1.FindNodeByKeyID(this.selectedPath);
可以设定选中Node的.而访问根级目录我用了Stack<string>等一些东西。 --------------------编程问答-------------------- SaveFileDialog,OpenFileDialog的属性好多啊,继续愁,做好久了,再不完工就要被老板骂死了,同志们纳,帮帮忙吧 --------------------编程问答-------------------- 遇到同样的难题了。。。求整体解决方案。。。
跪求楼主将自定义控件打包到资源频道
补充:.NET技术 , C#