2013-05-16 32 views
0

長話短說:樹節點刪除()不工作

  • 我遍歷一個通用的樹和收集一些節點列表,按照一個完整的遍歷後過濾
  • 我開始通過一個消除每一個節點一個

刪除收集節點

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; 
} 

發行固定:這個問題是重複的節點(濾波是檢查節點名稱)有關。

+0

你說的「不要刪除」呢?它們是否保留在其父節點的Nodes集合中? – svinja

+0

它們在樹形視圖中顯示/可見,即使它們被移除後它們將父引用設置爲null,並且父節點將不會引用它們。 –

+0

所以你有遍歷代碼,你可以更新的問題也 – Damith

回答

0

如果你想保持當前的節點,但只需要去掉孩子

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

沒有運氣,節點仍然可見 –