none
Seleccionar hijo en treeview RRS feed

  • Pregunta

  • Buenas, tengo un TreeView que tiene incluidos varios TreeNode, los cuales a la vez tambien tienen otros TreeNode agregados. O sea es un arbol de 2 niveles.

    Como puedo hacer para seleccionar y marcar como seleccionado un nodo hijo??

     

    Probe con: arbol.SelectedNode = arbol.Nodes[0].Nodes[0]; para marcar el primer hijo y no me da bola.

    Si pongo arbol.SelectedNode = arbol.Nodes[0] me selecciona el primer padre, pero lo del hijo no lo logro.

    Como puedo hacer??

    GRACIAS

     

    viernes, 24 de septiembre de 2010 16:17

Respuestas

  • Buenas, estaba pasando por el evento afterSelect. Para que no lo ejecute le puse una varible control para que la primera vez que es llamado no se ejecute.

    Dejo el código para el que le sirva.

    control = true;
    
    contenidos.SelectedNode = contenidos.Nodes[index_leccion].Nodes[index_apartado];
    contenidos.Select();
    
    contenidos.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyUp);
    contenidos.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.contenidos_AfterSelect); 
    
    private void contenidos_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (!control)
        {
          .....
        }
        else
        {
          control = false;
        }
    }
     
    
    
    Muchas gracias!!
    • Marcado como respuesta polaco_cac lunes, 27 de septiembre de 2010 14:13
    lunes, 27 de septiembre de 2010 11:42

Todas las respuestas

  • me imagino que debe ser algo como

     

    arbol.Nodes[0].SelectNode = arbol.Nodes[0].Nodes[0];

     

    mas omenos deberias revisarlo.

     

    Saludos


    Coding "La lucha diaria" - D3S........D4S
    Necesitamos un voto: Aquí
    "Ya tengo Blog :D": Primer Entrada Silverlight y WCF RIA
    viernes, 24 de septiembre de 2010 16:22
  • disculpame creo que es así:

    Treeview1.Nodes[0].ChildNodes[0].Selected =

     

    true;


    Coding "La lucha diaria" - D3S........D4S
    Necesitamos un voto: Aquí
    "Ya tengo Blog :D": Primer Entrada Silverlight y WCF RIA
    • Propuesto como respuesta Felipe Sotelo S viernes, 24 de septiembre de 2010 16:29
    viernes, 24 de septiembre de 2010 16:29
  • Probe pero no funciona. El childNodes no existe en treenode. Y la primera ya la habia probado y no pasa nada. Probe agregando contenidos.HideSelection = false; por las dudas y tampoco.
    viernes, 24 de septiembre de 2010 16:35
  • hola

    prueba usando

     treeView1.SelectedNode = treeView1.Nodes[0].Nodes[0];
     treeView1.Select();

     

    estaba funcionado bien la seleccion, solo que el treeview no tenia el foco

    sino prueba de asignar la propeidad "HideSelection", veras que aunque no uses el Select() se ve la seleccion con un tono gris claro, si pasa el foco al treeview, se activa en azul

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 16:44
  • La linea contenidos.SelectedNode = contenidos.Nodes[0].Nodes[1]; hace que no se levante el form. Es decir, no se llega a ver nada pero tampoco tira error ni se queda pensado. Que puede ser?? Cuando llego a esta instancia el arbol ya está cargado completo.
    viernes, 24 de septiembre de 2010 16:53
  • No entiendo contenidos.SelectedNode acaso esto no es de solo lectura?
    Coding "La lucha diaria" - D3S........D4S
    Necesitamos un voto: Aquí
    "Ya tengo Blog :D": Primer Entrada Silverlight y WCF RIA
    viernes, 24 de septiembre de 2010 16:59
  • hola

    estas usando algun evento del estilo SelectedIndexChanged, en el treeview ?

    si es asi pon un breakpoint en ese evento y valoda sino entra alli cuando pasa por esa linea

    esto puede hacer que entre en un loop

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 16:59
  • No porque si hago contenidos.SelectedNode = contenidos.Nodes[2] por ejemplo, me selecciona el segundo nodo. Ahora yo quiero que se seleccione un hijo de ese nodo y es lo que no consigo.
    viernes, 24 de septiembre de 2010 17:00
  • Huy perdón pense que era para ASP.NET :D

     


    Coding "La lucha diaria" - D3S........D4S
    Necesitamos un voto: Aquí
    "Ya tengo Blog :D": Primer Entrada Silverlight y WCF RIA
    viernes, 24 de septiembre de 2010 17:02
  • Ya intentaste asi:

    treeView1.SelectedNode = treeView1.Nodes[0].Nodes[0].Nodes[0];

    treeView1.Select(); :DD


    Coding "La lucha diaria" - D3S........D4S
    Necesitamos un voto: Aquí
    "Ya tengo Blog :D": Primer Entrada Silverlight y WCF RIA
    viernes, 24 de septiembre de 2010 17:08

  • es rarisimo, lo he probado y funciona perfecto

    prueba de create un treeview nuevo, cargale desde el diseñador algunos items (usa la propeidad Coleccion)

    luego usa esa linea

     treeView1.SelectedNode = treeView1.Nodes[0].Nodes[0];

    veras que funciona, yo lo probe y anda perfecto

    debe de ser algo en ese tree en particular, has validado si se lanza algun evento al seleccionar el item ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 17:09
  • Puede ser por el evento? Porque este arbol sirve para seleccionar un apartado de un curso y lo que hago es recordar el apartado en el que quedó la ultima vez y marcarlo cuando entra de nuevo, por lo que se estaria seleccionando automaticamente. Que tendría que hacer para evitar el problema?? Asignarle el evento despues de marcar el nodo??

    GRACIAS

    viernes, 24 de septiembre de 2010 17:13
  • Asignarle el evento despues de marcar el nodo??

    exacto eso es justo lo que estaba por proponerte, quita el handler automatico al evento

    y agrega uno por codigo usando el AddHandler despues de realizar la seleccion

     

    saludos

     


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 17:17
  • Era por eso nomas.

    Ahora si hago

    contenidos.SelectedNode = contenidos.Nodes[2].Nodes[2];
    contenidos.Select();
    

    Habiendo quitado los eventos, funciona perfecto.

    Pero si le trato de agregar los eventos se queda nomas

    contenidos.SelectedNode = contenidos.Nodes[2].Nodes[2];
    contenidos.Select();
    
    contenidos.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.contenidos_AfterSelect);
    contenidos.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyUp);
    

    Estoy agregando mal los eventos o que pasa??

    GRACIAS

    viernes, 24 de septiembre de 2010 17:22

  • si pones un breakpoint en esos evento, al seleccionar se ejecuta alguno ? o sea ingresa, se detiene alli el codigo

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 17:28
  • No entendi. Si hago un select se ejecuta alguno de los eventos me preguntas?
    viernes, 24 de septiembre de 2010 17:36
  • claro, cuando pasa por la lines

    contenidos.SelectedNode = contenidos.Nodes[2].Nodes[2];

    se ejecuta alguno de los eventos ?

    porque ahora los estas agregando desde codigo, no deberia pasar por alli al asignar la seleccion


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 24 de septiembre de 2010 18:05
  • Buenas, estaba pasando por el evento afterSelect. Para que no lo ejecute le puse una varible control para que la primera vez que es llamado no se ejecute.

    Dejo el código para el que le sirva.

    control = true;
    
    contenidos.SelectedNode = contenidos.Nodes[index_leccion].Nodes[index_apartado];
    contenidos.Select();
    
    contenidos.KeyUp += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyUp);
    contenidos.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.contenidos_AfterSelect); 
    
    private void contenidos_AfterSelect(object sender, TreeViewEventArgs e)
    {
        if (!control)
        {
          .....
        }
        else
        {
          control = false;
        }
    }
     
    
    
    Muchas gracias!!
    • Marcado como respuesta polaco_cac lunes, 27 de septiembre de 2010 14:13
    lunes, 27 de septiembre de 2010 11:42