gpt4 book ai didi

c# - 如何有效地从 TreeView 中删除选中的项目?

转载 作者:太空狗 更新时间:2023-10-29 19:57:56 25 4
gpt4 key购买 nike

如何轻松地遍历 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);
}
}
}

(是的,目的只是从两层深的树中修剪节点。)

最佳答案

尝试向后遍历节点。这样你的索引就不会增加超过你的节点大小:

for( int ndx = nodes.Count; ndx > 0; ndx--){  TreeNode node = nodes[ndx-1];  if (node.Checked)  {     nodes.Remove(node);  }   // Recurse through the child nodes...}

关于c# - 如何有效地从 TreeView 中删除选中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com