2011-12-27 29 views
9

Quiero mostrar todos los elementos secundarios del primer nivel en la vista de árbol de forma predeterminada. Y luego expanda todos los hijos de aquellos al hacer clic.Cómo expandir los hijos de primer nivel solo de Treeview

+1

Iterar los nodos y llamar a su método de despliegue(). "aquellos que hacen clic" es demasiado vago. –

Respuesta

11

Probar:

foreach (TreeNode tn in treeView1.Nodes) { 
    tn.Expand(); 
} 

Al añadir nodos en tiempo de ejecución, sólo puede comprobar el nivel y ampliar, si es necesario:

private void ShoudAutoExpand(TreeNode tn) { 
    if (tn.Level == 0) 
    tn.Expand(); 
} 

No hay NodeAdded caso se puede enganchar en comprobar que automáticamente. Debería determinarse a sí mismo si un nodo debería o no expandirse "por defecto".

Actualización:

Desde su comentario, parece que usted quiere tener todos los nodos expandidos de nivel 0, pero luego expandir todos los nodos secundarios de nivel 1 cuando se expande ellos.

Try suscribirse al evento BeforeExpand con este código:

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { 
    treeView1.BeforeExpand -= treeView1_BeforeExpand; 
    if (e.Node.Level == 1) { 
    e.Node.ExpandAll(); 
    } 
    treeView1.BeforeExpand += treeView1_BeforeExpand; 
} 
+0

la primera parte muestra a los niños de primer nivel como me gustaría. Pero cuando hago clic en cualquiera de ellos, los herederos no se expanden por completo. – zsharp

+0

@zsharp Código actualizado. Parece que básicamente quieres que todos los nodos se expandan automáticamente "excepto" los nodos de nivel 1. ¿Suena bien? – LarsTech

+0

esa es la única, estaba intentando con onmouseclick que era un desastre. gracias – zsharp

1

puede intentar algo como esto .. tendrá que cambiar el ejemplo para adaptarse a su propio código ya se omite la pegar cualquier código que ha o el intento de tener

private void addChildNode_Click(object sender, EventArgs e) 
{ 
    var childNode = textBox1.Text.Trim(); 
    if (!string.IsNullOrEmpty(childNode)) { 
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0]; 
    if (parentNode != null) { 
     parentNode.Nodes.Add(childNode); 
     treeView2.ExpandAll(); 
    } 
    } 
} 
1

si quieres un recursivo, intente esto:

void expAll(TreeNode node) 
{ 
    node.Expand(); 
    foreach(TreeNode i in node.Nodes) 
    { 
     expAll(i); 
    } 
} 
1
private TreeNode ExpandUptoLevel(TreeNode tn,int level) 
    { 
     if (level != 0) 
     { 
      level --; 
      tn.Nodes[0].Expand(); 
      return ExpandUptoLevel(tn.FirstNode, level); 
     }        
     return tn; 
    } 
0

Para expandir todos los nodos de un árbol a un nivel, el código anterior no funciona. Simplemente agregue un cheque para leer y comparar el nivel de nodo real al nivel al que desea expandir. Aquí hay un fragmento de código.

private void ExpandUptoLevel(TreeNode tn, int level) 
    { 
     if (level >= tn.Level) 
     { 
      tn.Expand(); 
      foreach (TreeNode i in tn.Nodes) 
      { 
       ExpandUptoLevel(i,level); 
      } 
     } 
    } 
+0

Respuesta a la publicación de Ravindra Sinare - no publicar inmediatamente arriba. –

0

Sólo para abrir los primeros nodos:

for (int i = 0; i< treeView1.Nodes.Count; i++) 
     { 
      treeView1.Nodes[i].Expand(); 
     } 
+0

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. Por favor, intente no saturar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones! – kayess

Cuestiones relacionadas