2009-08-26 10 views
0

Ich habe eine Baumansicht in meinem C# -Code. Ich möchte alle vorhandenen Vorkommen eines Baumknotens durch einen Klick auf einen anderen Text in meiner gesamten Baumansicht ersetzen.Suchen und Ersetzen eines Baumknotens in C#

Zum Beispiel habe ich 3 Vorkommen eines Knotens mit 'Text' als "Manuell". Ich möchte alle diese 3 Knoten durch den Text "Automatisch" ersetzen. Das Problem ist, dass diese 3 Knoten in der Baumansicht unter 3 verschiedenen Zweigen sind. Sie teilen nicht denselben übergeordneten Knoten. Ich beabsichtige zu schreiben, um diesen Prozess automatisch zu machen, indem ich eine for-Schleife schreibe, aber ich verstehe nicht, wie man die erforderlichen 3 Knoten an erster Stelle findet.

Antwort

3

Ich würde vorschlagen, Rekursivität.

Natürlich ist dies ein Beispiel und Sie müssten die myTree-Deklaration entfernen und Ihren Baum verwenden, aber das sollte Ihnen den Anfang machen.

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

Es gibt einen Fehler für aNode.ChildNodes.Count: 'System.Windows.Forms.TreeNode' enthält keine Definition für 'Childnodes' Welche Version von C# verwenden Sie? – zack

+0

Ich verwende FrameWork 3.5 und ich glaube, dass Sie in Framework 1.1 Knoten verwenden können. Siehe Dokumentation http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode_members(VS.71).aspx –