从路径列表填充树视图 [英] populate treeview from a list of path

查看:109
本文介绍了从路径列表填充树视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从文件夹路径列表填充一个TreeView,例如:

  C:\ WINDOWS \加载项
C:\ WINDOWS \ AppPatch文件
C:\ WINDOWS \ AppPatch文件\ MUI
C:\ WINDOWS \ AppPatch文件\ MUI \ 040C
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ MUI
C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ MUI \ 0409
 

有一个这样的输出中:

 ├───addins
├───AppPatch
│└───MUI
│└───040C
├───Microsoft.NET
│└───Framework
│└───v2.0.50727
│└───MUI
│└───0409
 

注意有没有C:\ WINDOWS \ Microsoft.NET'或'C:\ WINDOWS \ Microsoft.NET \框架在列表中。我一直在这方面的工作了差不多两天,有一个在我的code一堆错误的。希望我可以在这里得到帮助。

感谢。

埃里克

解决方案

私人无效Form1_Load的(对象发件人,EventArgs的)     {         VAR路径=新的名单,其中,串>                         {                             @C:\ WINDOWS \ AppPatch文件\ MUI \ 040C                             @C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727                             @C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ MUI,                             @C:\ WINDOWS \加载项,                             @C:\ WINDOWS \ AppPatch文件,                             @C:\ WINDOWS \ AppPatch文件\ MUI,                             @C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ MUI \ 0409                         };         treeView1.PathSeparator = @\;         PopulateTreeView(为TreeView1,路径,'\\'); } 私有静态无效PopulateTreeView(TreeView的树视图,IEnumerable的<字符串>路径,焦炭pathSeparator)     {         树节点lastNode = NULL;         串subPathAgg;         的foreach(在路径字符串路径)         {             subPathAgg =的String.Empty;             的foreach(在path.Split串子路径(pathSeparator))             {                 subPathAgg + = SUBPATH + pathSeparator;                 树节点[]节点= treeView.Nodes.Find(subPathAgg,真正的);                 如果(nodes.Length == 0)                     如果(lastNode == NULL)                         lastNode = treeView.Nodes.Add(subPathAgg,子路径);                     其他                         lastNode = lastNode.Nodes.Add(subPathAgg,子路径);                 其他                     lastNode =节点[0];             }         }     }

I'm trying to populate a treeview from a list of folder path, for example:

C:\WINDOWS\addins
C:\WINDOWS\AppPatch
C:\WINDOWS\AppPatch\MUI
C:\WINDOWS\AppPatch\MUI\040C
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409

with an ouput like this:

├───addins
├───AppPatch
│   └───MUI
│       └───040C
├───Microsoft.NET
│   └───Framework
│       └───v2.0.50727
│           └───MUI
│               └───0409

Notice there's no 'C:\WINDOWS\Microsoft.NET' or 'C:\WINDOWS\Microsoft.NET\Framework' in the list. I've been working on this for almost two days and there's a bunch of bug in my code. Hope I can get help from here.

Thanks.

Eric

解决方案

private void Form1_Load(object sender, EventArgs e)
    {
        var paths = new List<string>
                        {
                            @"C:\WINDOWS\AppPatch\MUI\040C",
                            @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727",
                            @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI",
                            @"C:\WINDOWS\addins",
                            @"C:\WINDOWS\AppPatch",
                            @"C:\WINDOWS\AppPatch\MUI",
                            @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409"
                        };

        treeView1.PathSeparator = @"\";

        PopulateTreeView(treeView1, paths, '\\');
}


private static void PopulateTreeView(TreeView treeView, IEnumerable<string> paths, char pathSeparator)
    {
        TreeNode lastNode = null;
        string subPathAgg;
        foreach (string path in paths)
        {
            subPathAgg = string.Empty;
            foreach (string subPath in path.Split(pathSeparator))
            {
                subPathAgg += subPath + pathSeparator;
                TreeNode[] nodes = treeView.Nodes.Find(subPathAgg, true);
                if (nodes.Length == 0)
                    if (lastNode == null)
                        lastNode = treeView.Nodes.Add(subPathAgg, subPath);
                    else
                        lastNode = lastNode.Nodes.Add(subPathAgg, subPath);
                else
                    lastNode = nodes[0];
            }
        }
    }

这篇关于从路径列表填充树视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆