如何轻松遍历TreeView中的所有节点,检查它们的.Checked属性,然后删除所有已检查的节点?如何有效地从TreeView中删除检查的项目?
看起来很简单,但你不应该修改你正在迭代的集合,从而消除了“foreach”循环的可能性。 (.Nodes.Remove调用正在修改集合。)如果尝试这样做,效果是只有大约一半的.Checked节点被删除。
即使有人要使用两遍:首先创建一个临时索引列表,然后在第二遍时通过索引移除 - 每次删除索引都会发生变化,从而影响索引列表的完整性。
那么,最有效的方法是什么?
这里的代码看起来很好的例子,但实际上只删除有关.Checked节点:一半
foreach (TreeNode parent in treeView.Nodes)
{
if (parent.Checked)
{
treeView.Nodes.Remove(parent);
}
else
{
foreach (TreeNode child in parent.Nodes)
{
if (child.Checked) parent.Nodes.Remove(child);
}
}
}
(是的,目的是只从一个树是二修剪节点)
这是最有效的方法。 – Romias 2009-12-24 07:53:48