XtraTreeList.TreeList treeList 资源管理器

界面

左边  private DevExpress.XtraTreeList.TreeList treeListDisk;  显示文件和文件夹

右边 private DevExpress.XtraEditors.ListBoxControl listBoxControlFile; 显示文件

效果:点击treelist里面的某一项 右键listbox显示该目录下的所有文件

  #region 绑定本地磁盘到treeList
        private void InitData()  //在 Load事件里面加载此方法
        {
            treeListDisk.DataSource = new object();
        }

        bool loadDrives = false;

        bool IsFile(DirectoryInfo info)
        {
            try
            {
                return (info.Attributes & FileAttributes.Directory) == 0;
            }
            catch
            {
                return false;
            }
        }
        bool IsDrive(string val)
        {
            string[] drives = Directory.GetLogicalDrives();
            foreach (string drive in drives)
            {
                if (drive.Equals(val)) return true;
            }
            return false;
        }

        private void treeListDisk_VirtualTreeGetCellValue(object sender, DevExpress.XtraTreeList.VirtualTreeGetCellValueInfo e)
        {
            DirectoryInfo di = new DirectoryInfo(e.Node.ToString());
            if (e.Column == colName) { e.CellData = di.Name; }
            if (e.Column == colType)
            {
                if (IsDrive((string)e.Node)) e.CellData = "Drive";
                else if (!IsFile(di))
                    e.CellData = "Folder";
                else
                    e.CellData = "File";
            }
        }

        private void treeListDisk_VirtualTreeGetChildNodes(object sender, DevExpress.XtraTreeList.VirtualTreeGetChildNodesInfo e)
        {
            Cursor current = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;
            if (!loadDrives)
            {
                string[] roots = Directory.GetLogicalDrives();
                e.Children = roots;
                loadDrives = true;
            }
            else
            {
                try
                {
                    string path = e.Node.ToString();
                    if (Directory.Exists(path))
                    {
                        string[] dirs = Directory.GetDirectories(path);
                        string[] files = Directory.GetFiles(path);
                        string[] arr = new string[dirs.Length + files.Length];
                        dirs.CopyTo(arr, 0);
                        files.CopyTo(arr, dirs.Length);
                        e.Children = arr;
                    }
                    else e.Children = new object[] { };
                }
                catch { e.Children = new object[] { }; }
            }
            Cursor.Current = current;
        }

        private void AddFile(string path)
        {
            string[] disk = Directory.GetFiles(path);
            listBoxControlFile.Items.Clear();
            for (int i = 0; i < disk.Length; i++)
            {
                listBoxControlFile.Items.Add(Path.GetFileName(disk[i]));
            }
        }

        private void treeListDisk_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e)
        {
            if (e.Node.GetDisplayText("Type") == "Folder")
                e.NodeImageIndex = e.Node.Expanded ? 1 : 0;
            else if (e.Node.GetDisplayText("Type") == "File") e.NodeImageIndex = 2;
            else e.NodeImageIndex = 4;
        }
        #endregion

        private void treeListDisk_AfterExpand(object sender, NodeEventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            string path1 = GetForeach(e.Node, sb);
            string path2 = e.Node.GetDisplayText(0);
            string strKey = Path.Combine(path1, path2);
            try
            {
                AddFile(strKey);
            }
            catch (Exception ex)
            {
                
            }
        }

        private string GetForeach(TreeListNode nodeList, StringBuilder parentNodeName)
        {
            TreeListNode parentNode = nodeList.ParentNode;
            if (parentNode != null)
            {
                parentNodeName.Insert(0, parentNode.GetDisplayText(0) + "\\");
                return GetForeach(nodeList.ParentNode, parentNodeName);
            }
            return parentNodeName.ToString();
        }

哎,脑子不太行,简单的一个小算法写了一上午 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值