0

簡単に言えば:

  • ジェネリック ツリーをトラバースし、フィルターに従っていくつかのノードをリストに収集します
  • 完全な走査の後、各ノードを 1 つずつ削除し始めます

収集したノードを削除する

foreach (TreeData nd in nodeBucket.Reverse<TreeData>())
{
    if (nd.node.Parent != null)
    {
        nd.node.Remove();
    }
}

ツリーには約 2000 のノードがあります。どういうわけか、すべてのノードを削除する必要があるときに、削除されないノードがいくつかあり、Remove() が呼び出され、後で null の親があります。削除されないノードは常に同じです。

また試してみ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; 
}

問題が修正されました: 問題はノードの重複に関連していました (フィルタリングはノード名をチェックしていました)。

4

1 に答える 1