簡単に言えば:
- ジェネリック ツリーをトラバースし、フィルターに従っていくつかのノードをリストに収集します
- 完全な走査の後、各ノードを 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;
}
問題が修正されました: 問題はノードの重複に関連していました (フィルタリングはノード名をチェックしていました)。