【问题标题】:TreeNode Remove() not workingTreeNode Remove() 不工作
【发布时间】: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 并且父节点将没有对它们的引用。
  • 所以你有遍历代码,你也可以用它来更新问题

标签: c# winforms tree treeview


【解决方案1】:

如果要保留当前节点但只需要删除子节点

While(node.Nodes.Count>0)
   node.Nodes[0].Remove();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多