2009-08-26 11 views
0

私はC#コードでツリービューを持っています。私はボタンをクリックすると、ツリービューのツリー内のすべての既存の出来事を、別のテキストに置き換えたいと思っています。C#のツリーノードの検索と置き換え

たとえば、「テキスト」が「手動」のノードが3つあります。私は、これらの3つのノードのすべてをテキスト「自動」に置き換えたいと思います。問題は、これら3つのノードがツリービュー内の3つの異なるブランチの下にあることです。それらは同じ親ノードを共有しません。私はforループを書くことによってこのプロセスを自動化するつもりですが、まず最初に必要な3つのノードを見つける方法を理解していません。

答えて

3

私は再帰性の使用をお勧めします。

もちろんこれは例であり、myTree宣言を削除してツリーを使用する必要がありますが、これはあなたを始められるはずです。

private void replaceInTreeView() 
{ 
    TreeView myTree = new TreeView(); 
    ReplaceTextInAllNodes(myTree.Nodes, "REPLACEME", "WITHME"); 
} 

private void ReplaceTextInAllNodes(TreeNodeCollection treeNodes, string textToReplace, string newText) 
{ 
    foreach(TreeNode aNode in treeNodes) 
    { 
     aNode.Text = aNode.Text.Replace(textToReplace, newText); 

     if(aNode.ChildNodes.Count > 0) 
      ReplaceTextInAllNodes(aNode.ChildNodes, textToReplace, newText); 
     } 
    } 
} 
+0

それはaNode.ChildNodes.Countのエラーを与える: 「System.Windows.Forms.TreeNode」「のChildNodes」が 使用しているのC#のどのバージョンの定義が含まれていませんか? – zack

+0

私はFrameWork 3.5を使用していますが、Framework 1.1ではノードを使用できると思います。http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode_members(VS.71).aspx –