2012-03-30 8 views
0

TreeNodeを削除したようですが、その親に移動する必要があります。したがって、元のコレクションがインスタンスであっても変更されたことを確認するために、以下のようにしました。以下のコードであり、tvRightTreeは、ツリービューから確認のTreeNodeを削除する正しい方法は何ですか関心のツリービューコレクションが変更されました。列挙操作が実行されないことがあります。 Treenode Remove

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

のですか?ここで

答えて

2

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

あなたはtemperory TreeNodeCollectionを取り、そのコレクションにフィルタノードを追加および削除2つの機能

  1. を変更する必要があります。
  2. ループ内のノードを削除するコードを削除します。同じコレクション内でループしている間は、コレクションからオブジェクトを削除することはできません。
1

TreeNodeCollectionあなたがここにコレクションをコピーしていなかったので、参照型である:

TreeNodeCollection checkedNodeCollection = tvRightTree.CheckedNodes; 

それはあなたが新しいコレクションに明示的に項目をコピーする必要があるだけでtvRightTree.CheckedNodes
するためのリンクです。

あなたは、たとえば、

for 

代わりのforeachあなたが今使用して、またはLINQ's ForEachを使用を使用して、そのエラーを回避することができます

関連する問題