2012-03-30 77 views
0

它似乎刪除TreeNode我必須遍歷它的父母,因此我做了下面只是爲了找到原始集合被修改,即使它是一個實例。下面是代碼和tvRightTree感興趣收藏已修改;枚舉操作可能不會執行。 Treenode刪除

TreeNodeCollection checkedNodeCollection = tvRightTree.CheckedNodes; 
foreach (TreeNode checkedNode in checkedNodeCollection) { 
    //if the to be removed node is parent then remove through treeview 
    if (checkedNode.Parent != null) { 
    //compiler does not allow modifying a collection that we iterate 
    //hence resort to finding the parent and then remove 
    TreeNode targetParent = tvRightTree.FindNode(checkedNode.Parent.ValuePath); 
    targetParent.ChildNodes.Remove(checkedNode); 
    } else 
    tvRightTree.Nodes.Remove(checkedNode); 
    } 

什麼是從樹狀刪除選中的樹節點的正確方法TreeView的?

回答

2

可避免錯誤使用

for 

,而不是foreach你現在使用,或者使用LINQ's ForEach,例如

for(int i=0;i<checkedNodeCollection.Count;i++) 
{ 
    Treenode checkedNode = checkedNodeCollection[i]; 
    .... 
    .. 
} 
2

在這裏,你應該修改兩個功能

  1. 乘坐temperory TreeNodeCollection和過濾節點添加到集合和刪除。
  2. 刪除將刪除循環內節點的代碼。在同一個集合中循環時,無法從集合中刪除對象。
1

TreeNodeCollection是引用類型,所以你沒有複製到這裏集合:

TreeNodeCollection checkedNodeCollection = tvRightTree.CheckedNodes; 

它只是鏈接到tvRightTree.CheckedNodes
你需要明確項目複製到新收集;

相關問題