Treeview en Visual Basic

Me he creado un treeview en visual Basic y quiero que al pinchar en las carpetas me abra un formulario, cada carpeta del treewie abre un formulario diferente. ¿Cómo lo hago? Por favor se claro ya que lo único que he visto de Visual Basic es un curso de una semana. Ahora pinche donde pinche en el treeview me abre el mismo formulario.
Respuesta
1
En el evento tvTreeView_NodeClick(ByVal Node As MSComctlLib. Node) mira en node. Key la clave del nodo y segun esa clave, decide q formulario mostrar.

2 respuestas más de otros expertos

Respuesta
1
Ya te he contestado en tu pregunta anterior sobre el mismo tema. Por si ha habido algún error y se te ha perdido la respuesta, la pego otra vez a continuación:
>>>>>
No me habías dicho que querías abrir un formulario DISTINTO cada vez que pulsas el Treeview. Aunque me extrañaba y por eso te apuntaba el tema de Node. Key y Node.Text.
Te lo explico: cuando tu generas el Treeview, utilizas el método ADD sobre la colección Nodes. Esto es: utilizas sentencias del tipo:
Set NodeX = TreeView1.Nodes.Add("Raiz", 4, "R1", "Albumes", 1, 2)
En este ejemplo "R1" es la clave que asignamos a este nodo, y "Albumes" es el texto que asignamos a este Nodo. Además estamos diciendo que este nodo es un hijo (4) del nodo cuya clave es "Raiz".
Cuando el treeview se visualiza, aparecerá en el árbol el texto asignado es decir en este ejemplo "Albumes"
Si tu quieres que cuando pinchas en un determinado nodo se abra un formulario determinado, tendrás de alguna forma que identificar cada formulario con su nodo correspondiente.
No me dices como quieres hacer esto. Habría muchas formas de hacerlo. Se me ocurre que cuando no dices nada, estás suponiendo que los nombres que aparecen en el árbol, son precisamente los nombres de los formularios, es decir, que cuando tu has ido leenando el trevieww con las sentencias ADD, en el texto donde yo ponía "Albumes" as ido poniendo los nombres de los formmularios por ejemplo Form1 Form2... etc.
¿Es así? Si es así la propiedad Text del formulario contiene precisamente el nombre del formulario a abrir, luego lo que tendrías que hacer en el evento Node Click sería algo como esto:
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
Node.text.Show
End Sub
Y ahora un consejo: Si es esto lo que estás haciendo no es un buena práctica de programación. Los textos del Treeview son una información para el usuario que deben tener por lo tanto un contenido fácil de entender. Hacer coincidir esto con el nombre de un formulario que es un parámetro del programa que involucra muchas cosas es muy malo. Imaginate que cuándo esté todo hecho al usuario no le gusta el texto del treeview y te pide cambiarlo. O que se decide tradicir la aplicación al inglés. ¿Qué vas a hacer? ¿Cambiar todos los nombres de los formularios y todas las referencias a los mismos en toda la aplicación? Sería un problema.
Como mínimo los nombres de los formularios deberían ser las claves del Treeview. Estas claves no se ven, pero cuando necesites mostrar el formulario harías:
NODE.key.Show
Esto tye da libertad para poner en el Treeview el texto que quieras, incluso con varias palabras y modificarlo cuantas veces se necesite sin afectar para nada el programa
Siento mucho darte la lata, pero no me aclaro con esta parte:
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
Node.text.Show
End Sub
¿Text qué es? ¿El nombre del formulario?
Yo tengo un treeview que es el siguiente:
Incidencias
-
-
-
- (Dentro de esta dos más)
--
Clientes
-
-
- (Dentro de esta dos más)
Y más
-
-
-
-
Yo quiero que al pinchar en uno de los que esta dentro de Clientes me aparezca un formulario.
Me he creado el treeview de la siguiente manera:
set NOdx = Treeview1.nodes.add(,,"RP4", "Clientes",1)
Como te he dicho es la primera vez que me pongo solo a programar en visual y estoy muy liado, siento ser tan pesado.
Gracias.
Me dices:
"Yo quiero que al pinchar en uno de los que esta dentro de Clientes me aparezca un formulario"
¿Quieres decir que al pinchar uno cualquiera de los que está dentro de clientes te aparezca siempre el mismo formulario, o que te aparezca una instancia distinta del mismo formulario para cada cliente, o que que te aparezca un formulario distinto para cada uno de los clientes?
En los dos primeros casos: ¿Cómo se llama el formulario?
En el tercer caso tendrás muchos formularios con nombres distintos. ¿Cómo asocias cada nombre de formulario con cada cliente?
Clientes tiene dentro:
Nuevo Cliente
Modificar
Contactos (que tiene dos=
Nuevo Contacto
MOdificar
Al pinchar en clientes se te tiene que desplegar el menu.
Nuevo CLiente y modificar abre el mismo formulario. El formulario se llama form3.
Si tu quieres que pinchando "Nuevo Cliente" y "Modificar" dentro de "Clientes" se abra el formulario "Form3" tienes que poner algo que distinga a esos dos nodos en el evento NodeClick. Lo que los distingue es que el padre de ambos es "Cliente" cuya clave, según me indicaste en un mensaje anterior es "RP4"
Tendrías que ponerlo entonces así:
Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
if Node.Parent.Key="RP4" Then
Form3.Show
End if
End Sub
Espero que ahora te funcione como tu quieres.
¿Me permites otro consejo? Resulta muy extraño ver conceptos como "Modificar" en un Treeview. El Treeview está para representar estructuras de información, esto es, en tu caso clientes, contactos etc, pero las "acciones" como modificar no son parte de esa estructura sino que deben responder a opciones de menú o a botones de la barra de herramientas.
Si quieres te puedo dar algún consejo más sobre la "estructura" de tu aplicación, si me cuentas un poco de qué va.
Suerte:-)
Respuesta
1
Para solucionar el problema detallado coge el evento "NodeClick" del Treeview y en esta función verás que aparece como parámetro de entrada a la función un nodo, pues dependiendo de los valores de texto u otros valores que le introduzcas tu previamente a los nodos puedes preguntar por ellos y lanzar un formulario u otro dependiendo de estos valores.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas