在For / ForEach循环中向TreeView添加节点

时间:2013-09-07 13:00:13

标签: c# foreach treeview

我一直想弄清楚,但它太复杂了,所以我想问一下,因为我无法得到答案

CheckForIllegalCrossThreadCalls = false;
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        if(fbd.ShowDialog() == DialogResult.OK)
        {
            Thread t = new Thread(() => StartListing(fbd.SelectedPath));
            SplittedPath = fbd.SelectedPath.Split(Path.DirectorySeparatorChar);
            t.Start();              
            foreach(string s in SplittedPath)
            {
                if(treeView1.Nodes.Count > 0)
                {
                    treeView1.Nodes[i].Nodes.Add(s);
                    i++;
                    treeView1.Nodes[i].ImageIndex = 0;
                }
                else
                {
                    treeView1.Nodes.Add(s);
                    treeView1.Nodes[0].ImageIndex = 0;
                }
            }
        }

这是我的code.SplittedPath字符串通常看起来不错。它有所有拆分的东西,但在ForEach循环中,似乎只有2个字符串。当我删除

if(treeView1.Nodes.Count > 0)
            {
                treeView1.Nodes[i].Nodes.Add(s);
                i++;
                treeView1.Nodes[i].ImageIndex = 0;
            }
            else
            {
                treeView1.Nodes.Add(s);
                treeView1.Nodes[0].ImageIndex = 0;
            }

这个代码,它只是工作正常。当我将这些添加到ForEach循环时,它只是不添加所有SplittedPath字符串。任何解决方案?

1 个答案:

答案 0 :(得分:0)

您没有处理代码中的树结构,这就是它无效的原因。你这里只有2个级别。

如果您想要路径的树形图,请执行以下操作:

TreeNode n = null;
TreeNode parent = null;
foreach(string s in SplittedString)
{
    if (parent == null)
    {
        parent = new TreeNode(s);
        treeview1.Nodes.Add(parent);
        continue;
    }

    n = new TreeNode(s);
    parent.Nodes.Add(n);
    parent = n;
}

我不是说这是最好的方法,但你对迭代解决方案有一般的了解。

您将获得对父节点的引用,并且当您浏览路径时,父级将更改为添加的最后一个节点。这样,每个string s将处于树结构的不同级别。