【发布时间】:2013-05-11 11:26:42
【问题描述】:
长话短说:
- 我遍历一个通用树并根据过滤器将一些节点收集到一个列表中
- 在完全遍历之后,我开始一个一个地删除每个节点
移除收集到的节点
foreach (TreeData nd in nodeBucket.Reverse<TreeData>())
{
if (nd.node.Parent != null)
{
nd.node.Remove();
}
}
这棵树有大约 2000 个节点。不知何故,当所有节点都应该被删除时,有几个节点没有被删除,Remove() 被调用它们并且它们有一个空父后缀。没有被删除的节点总是一样的。
也试过node.Parent.Nodes.Remove(node),没有运气。
tree.BeginUpdate();
tree.EndUpdate();
tree.Invalidate();
tree.Refresh();
tree.Update();
不工作。
TreeData 结构如下所示:
struct TreeData
{
public TreeData( TreeNode node)
{
this.node = node;
this.parent = node.Parent;
this.level = node.Level;
}
public TreeNode node;
public TreeNode parent;
public int level;
}
问题已解决:问题与重复节点有关(过滤正在检查节点名称)。
【问题讨论】:
-
“不要被删除”是什么意思?它们是否保留在其父节点的 Nodes 集合中?
-
它们在树视图中显示/可见,即使在它们被删除后它们的父引用设置为 null 并且父节点将没有对它们的引用。
-
所以你有遍历代码,你也可以用它来更新问题