将节点添加到 for/foreach 循环中的树视图
本文关键字:循环 视图 foreach 节点 添加 for | 更新日期: 2023-09-27 18:30:27
我一直在试图弄清楚,但它太复杂了,所以我想问,因为我无法得到答案
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;
}
}
}
这是我的代码。拆分路径字符串通常看起来不错。它有所有拆分的东西,但在 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 循环时,它只是不会添加所有拆分路径字符串。有什么解决办法吗?
你不处理代码中的树结构,这就是它不起作用的原因。您在这里只有 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
都将处于树结构的不同级别。