如何建立一个treeview。让它显示一个指定目录下所有层次的子目录和文件。即类似资源管理器的样子。

解决方案 »

  1.   

    递归读文件加载节点呗
    Directory.GetXXX
      

  2.   

    http://www.cnblogs.com/sxg1010/archive/2006/07/28/462420.html
    http://www.cnblogs.com/yuyijq/archive/2005/08/04/207210.html
      

  3.   

    原来在codeproject里面找到一个
      

  4.   

    http://www.codeproject.com/cs/miscctrl/FileBrowser.asp一个强人写好的控件,直接拖过来就可以用
      

  5.   

    http://www.codeproject.com/useritems/TreeViewFileExplorer.asp
    http://www.codeproject.com/csharp/tv-lv-basic41.asp
      

  6.   

    ===============================================================
    /// <summary>
            /// 向树图添加盘符
            /// </summary>
            private void FilltvwDirectory()
            {
                //获取当前设备 盘符,并添加到数组 drivers[i] 里面
                string[] drives = Environment.GetLogicalDrives();
                for (int i = 0; i < drives.Length; i++)
                {
                    TreeNode cRoot = new TreeNode(drives[i]);
                    //TreeNode cRoot = new TreeNode();
                    //cRoot.Text = drives[i];
                    treeView1.Nodes.Add(cRoot);
                    AddDirectories(cRoot);
                }
            }
            /// <summary>
            /// 创建方法,添加盘符下的文件夹
            /// </summary>
            /// <param name="node"></param>
            private void AddDirectories(TreeNode node)
            {
                try
                {
                    // 获取当前节点路径\
                    DirectoryInfo dir = new DirectoryInfo(GetPathFormNode(node));
                    // 获取当前节点所在的路径下的子文件夹
                    DirectoryInfo[] e = dir.GetDirectories();                for (int i = 0; i < e.Length; i++)
                    {
                        string name = e[i].Name;
                        //判断是否是上级目录
                        if (!name.Equals(".") && !name.Equals(".."))
                        {
                            node.Nodes.Add(new TreeNode(name));
                        }
                    }
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            /// <summary>
            /// 获取节点的路径
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private string GetPathFormNode(TreeNode node)
            {
                if (node.Parent == null)
                {
                    return node.Text;
                }
                return Path.Combine(GetPathFormNode(node.Parent),node.Text);
                //递归调用产生节点对应文件夹的路径
               // Path.Combine 组合产生路径,如 Path.combine("A","B") 侧生成 "A\\B"        }
      

  7.   

    接上
     private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
            {
                TreeNode nodeExpanding =(TreeNode)e.Node;
                AddSubDirectores(nodeExpanding);
            }
            /// <summary>
            /// 调用 
            /// </summary>
            /// <param name="node"></param>
            private void AddSubDirectores(TreeNode node)
            {
                for (int i = 0; i < node.Nodes.Count; i++)
                {
                    AddDirectories(node.Nodes[i]);
                }
            }
      

  8.   

    ===========如果你运行 代码报错的话...
     电脑 存在 g: DVD 驱动器 之类的....你只要 绑定的时候设置一下
    就可以了 
     // 如果你得盘符 存在 像 G DVD 驱动盘,就要注意了.否则会报错的...
                    if (cRoot.Text != "G:\\")
                    {
                        AddDirectories(cRoot);
                    }