如何轻松遍历 TreeView 中的所有节点,检查它们的 .Checked 属性,然后删除所有选中的节点?
这看起来很简单,但您不应该修改您正在迭代的集合,从而消除“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);
}
}
}
(是的,目的只是从两层深的树中修剪节点。)