2012-03-30 22 views
0

Es scheint für das Entfernen eines TreeNode, die ich zu seinem Elternteil durchlaufen muss, daher habe ich unten nur getan, um zu finden, dass die ursprüngliche Sammlung geändert wurde, obwohl es eine Instanz war. Unten ist der Code und tvRightTree ist das TreeView vonSammlung wurde geändert; Aufzählungsoperation wird möglicherweise nicht ausgeführt. Treenode Remove

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

Was ist der richtige Weg geprüft TreeNodes vom treeview zu entfernen?

Antwort

2

Sie diesen Fehler durch die Verwendung

for 

statt foreach Sie jetzt verwenden, vermeiden können, oder LINQ's ForEach verwenden, zum Beispiel

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

Hier sollten Sie zwei Funktionalitäten

  1. ein temperory TreeNodeCollection Nehmen Sie ändern und die gefilterten Knoten zu dieser Sammlung hinzufügen und entfernen.
  2. Entfernen Sie den Code, der die Knoten innerhalb der Schleife entfernt. Sie können ein Objekt nicht aus einer Sammlung entfernen, während Sie in derselben Sammlung eine Schleife erstellen.
1

TreeNodeCollection ist Referenztyp, so dass Sie nicht die Sammlung hier kopiert haben:

TreeNodeCollection checkedNodeCollection = tvRightTree.CheckedNodes; 

zu Es ist nur verknüpfen tvRightTree.CheckedNodes
Sie müssen Elemente explizit neue Sammlung kopieren;

Verwandte Themen