2009-08-26 9 views
0

J'ai une vue arborescente dans mon code C#. Je souhaite remplacer toutes les occurrences existantes d'un nœud d'arbre par un texte différent dans l'ensemble de ma vue arborescente lors d'un clic sur un bouton. Par exemple, j'ai 3 occurrences d'un noeud avec 'Text' comme "Manual". Je veux remplacer tous ces 3 nœuds par le texte "Automatique". Le problème est que ces 3 nœuds sont sous 3 branches différentes dans l'arborescence. Ils ne partagent pas le même nœud parent. J'ai l'intention d'écrire pour rendre ce processus automatique en écrivant une boucle for mais je ne comprends pas comment trouver les 3 nœuds requis en premier lieu.Trouver et remplacer un nœud d'arbre en C#

Répondre

3

Je suggère d'utiliser la récursivité.

Bien sûr, ceci est un exemple et vous devez supprimer la déclaration myTree et utiliser votre arborescence, mais cela devrait vous aider à démarrer.

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

Il donne une erreur pour aNode.ChildNodes.Count: 'System.Windows.Forms.TreeNode' ne contient pas une définition pour '' ChildNodes Quelle version de C# utilisez-vous? – zack

+0

J'utilise FrameWork 3.5 et je crois que sur Framework 1.1, vous pouvez utiliser les nœuds Voir la documentation http://msdn.microsoft.com/fr-fr/library/system.windows.forms.treenode_members(VS.71).aspx –

Questions connexes