当前位置:编程学习 > C#/ASP.NET >>

求助自定义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.RefFlg.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.RefFlg.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 --------------------编程问答--------------------
引用 2 楼  的回复:
TreeList中第一次只加载磁盘,每当展开时再去去读下一级目录,但是一些属性需要你自己去编码实现,比如访问根级目录,可能需要你逐级往上寻找parent

总之别想着什么都可以轻易得到,自己想办法


顶。 --------------------编程问答--------------------
引用 2 楼  的回复:
TreeList中第一次只加载磁盘,每当展开时再去去读下一级目录,但是一些属性需要你自己去编码实现,比如访问根级目录,可能需要你逐级往上寻找parent

总之别想着什么都可以轻易得到,自己想办法


②SelectedPath(获取或设置用户选定的路径)已经解决了,原来
this.treeList1.FocusedNode = this.treeList1.FindNodeByKeyID(this.selectedPath);
可以设定选中Node的.而访问根级目录我用了Stack<string>等一些东西。 --------------------编程问答-------------------- SaveFileDialog,OpenFileDialog的属性好多啊,继续愁,做好久了,再不完工就要被老板骂死了,同志们纳,帮帮忙吧 --------------------编程问答-------------------- 遇到同样的难题了。。。求整体解决方案。。。

跪求楼主将自定义控件打包到资源频道
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,