从路径列表填充树视图视图、路径、列表

2023-09-02 10:49:36 作者:再好的也输给备注

我想从文件夹路径列表填充一个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];             }         }     } Excel如何建立分类下拉列表填充项

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

C:WINDOWSaddins
C:WINDOWSAppPatch
C:WINDOWSAppPatchMUI
C:WINDOWSAppPatchMUI40C
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI
C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI409

with an ouput like this:

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

Notice there's no 'C:WINDOWSMicrosoft.NET' or 'C:WINDOWSMicrosoft.NETFramework' 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:WINDOWSAppPatchMUI40C",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI",
                            @"C:WINDOWSaddins",
                            @"C:WINDOWSAppPatch",
                            @"C:WINDOWSAppPatchMUI",
                            @"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727MUI409"
                        };

        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];
            }
        }
    }