2017-10-16 9 views
3

J'ai un TreeView dans mon formulaire, j'ai besoin d'ajouter par programme un nouveau nœud sur l'événement souris particolar. Ensuite, j'ai besoin d'étendre l'arbre juste au nouveau noeud ajouté. J'essaye d'appeler la fonction Expand() sur le nouveau noeud ajouté mais je ne fonctionne pas.Comment développer un nouveau nœud ajouté dans TreeView

C'est un extrait de mon code:

TreeNodeCollection tree = treeViewProtocolli.Nodes["Radice"].Nodes["ModBus"].Nodes; 
if (tree != null) 
{ 
    TreeNode node = new TreeNode(); 
    node.Text = "MBRTU"; 
    node.Name = "MBRTU"; 
    node.Tag = "BASE"; 
    node.ForeColor = System.Drawing.Color.Red; 
    tree.Add(node); 

TreeNode skBase = treeViewProtocolli.Nodes["Radice"].Nodes["ModBus"].Nodes["MBRTU"]; 
    if(skBase != null) 
    { 
     TreeNode sknode = new TreeNode(); 
     sknode.Text = nome + " -> [Slave = " + slave + " | Indirizzo = " + indirizzo + 
       " | Funzione = " + funzione + " | Abilitato = " + abil + " | Lunghezza blocco = " + lunghezza + "]"; 

     sknode.Name = "MBRTU"; 

     skBase.Nodes.Add(sknode); 

     sknode.Expand(); 
    } 
} 

Toute suggestion? Merci.

Répondre

1

Vous pouvez. appel EnsureVisible méthode de noeud Il assure que le nœud d'arborescence est visible, en développant les nœuds d'arbres et en faisant défiler le contrôle de l'arborescence si nécessaire

Par exemple:..

var node = treeView1.Nodes[0].Nodes[0].Nodes.Add("something"); 
node.EnsureVisible(); 
1

Utilisez TreeNode.Expand() sur chaque nœud de la racine à la feuille que vous souhaitez développer, en utilisant Développer sur le nœud feuille ou le nœud que vous souhaitez développer, seul le nœud lui-même doit afficher ses sous-enfants. ex. root -> nextnode1 -> somennode2 Si vous voulez être étendu truout somennode2 vous devez développer tous ses nœuds Parrent (root.expand, nextnode1.expand et si vous voulez vous somennode2.expand dernier nœud étendu

+0

Vous n'avez pas besoin de développer tous les parents manuellement, au lieu que vous pouvez appeler [ 'EnsureVisible'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode .ensurevisible (v = vs.110) .aspx) méthode du noeud. Il s'assure que le nœud de l'arbre est visible, en développant les nœuds de l'arborescence et en faisant défiler le contrôle de l'arborescence selon les besoins comme [this] (https://stackoverflow.com/a/46768089/3110834). –

1

tout d'abord, merci à tous ceux qui m'a répondu

J'ai trouvé une solution facile: d'abord je construis un List avec tous les parents du nœud désiré pour développer, puis je parcoure la liste en arrière pour développer chaque TreeNode. C'est mon code.

private void OpenTree(TreeNode node) 
{ 
    List<TreeNode> parents = new List<TreeNode>(); 
    parents.Add(node); // Add the actual node to expand 

    TreeNode actPa = node; 
    do 
    { 
     actPa = actPa.Parent; 
     if (actPa != null) 
      parents.Add(actPa);  // Add all the parent node 
    } 
    while (actPa != null); 

    if(parents.Count > 0) 
    { 
     for(int iRep = parents.Count - 1; iRep >= 0; iRep --) 
     { 
      parents[iRep].Expand(); 
     } 
    } 
} 
+0

Ce que vous essayez de faire avec le code ci-dessus peut être simplement réalisé en utilisant la méthode 'EnsureVisible' du nœud, comme ce que j'ai fait dans la réponse. –