0

我一直想弄清楚,但它是如此复杂,所以我想问,因为我无法得到答案

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

这是我的代码。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 字符串。任何解决方案?

4

1 回答 1

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人都将处于树结构的不同级别。

于 2013-09-07T14:18:34.523 回答