我一直想弄清楚,但它太复杂了,所以我想问一下,因为我无法得到答案
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字符串。任何解决方案?
答案 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
将处于树结构的不同级别。