2017-01-25 4 views
0

J'essaie d'appeler une fonction après un clic sur un bouton uniquement si l'un des nœuds est sélectionné. La boucle foreach réitère uniquement le nœud racine en évitant tous les enfants. Notez que je dois appeler ceci dans la fonction de clic de bouton. Donc ce sera génial si j'obtiens les deux réponses (écrire une fonction séparée et l'appeler dans la fonction button_click ou écrire directement dans la fonction button_click). La fonction ReadData fonctionne correctement. Le seul problème est l'absence d'itération de tous les nœuds.Impossible d'itérer l'arborescence avec tous les enfants C#

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 t = new Form2();   
    TreeNodeCollection node = this.treeView1.Nodes; 
    foreach(TreeNode tn in node) 
    { 
     if(tn.IsSelected) 
     { 
      //This is the function I need to call from form2. 
      t.ReadData(null); 
     } 
    } 
    t.Show(); 
} 
+1

Y at-il une raison de ne pas utiliser la propriété 'SelectedNode'? –

+0

[propriété TreeView.Nodes] (https://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.nodes (v = vs.110) .aspx) "La propriété Nodes contient une collection des objets TreeNode, chacun ayant une propriété Nodes pouvant contenir son propre TreeNodeCollection. " –

Répondre

1

Vous devez utiliser la récursivité pour parcourir tous les nœuds:

private void ReadRecurcive(TreeNodeCollection nodes, Form form) 
{ 
    foreach (TreeNode tn in nodes) 
    { 
     if(tn.IsSelected) 
     { 
      //This is the function you need to call from form2. 
      form.ReadData(null); 
     } 

     ReadRecurcive(tn.Nodes, form); 
    } 
} 

Et votre gestionnaire:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 t = new Form2();   
    TreeNodeCollection node = this.treeView1.Nodes; 

    ReadRecurcive(node, t); 

    t.Show(); 
}