Programación General > Visual Basic para principiantes
Varios listbox
kelmax:
Tengo una aplicacion la cual tiene 5 listbox con informacion y lo que necesito saber como puedo hacer que cuando se seleciona un listbox se marquen los que estan relacionados con el esta seleccionado.
donramone:
Hola no entendi mucho el panorama de tu situación, soy medio novato con el vb pero te ejemplifico lo que yo hice en un caso (creo que parecido)
A modo de ejemplo: supongamos que tengo una tabla "paises" (id_pais, nombre_pais) y otra tabla "ciudades" (id_ciudad, id_pais, nombre_ciudad) relacionadas por el id_pais
y tengo 2 List (lst1, lst2). Según lo seleccionado en lst1 carga datos en el lst2.
Lo que yo hice fue cargar en el itemdata del list los id, y según lo que estaba seleccionado abria un recordset
--- Código: Visual Basic --- ' Primero lleno el primer listrs.open "SELECT * FROM Paises"While Not rs.EOF = True Lst1.AddItem rs!nombre_pais Lst1.ItemData(Lst1.NewIndex) = rs!id_pais rs.MoveNextWend ' En el evento "click de lst1" cargo los datos al lst2rs.Open "SELECT * From Ciudades Where Id_pais = '" & lst1.ItemData(lst1.ListIndex) & "'"lst2.Additem rs!nombre_ciudadrs.movenext
Espero que te haya oriendato en algo lo que yo hice, cualquier cosa chifla.
Te repito que no entendi bien si eso era lo que querias hacer y que no soy un maestro del visual basic, solo trato de darte una mano
Salutes!
kelmax:
los list estan con informacion ejemplo
list1 list2 list3 list4
codigo1 nombre1 categoria1 fecha1
codigo2 nombre2 categoria2 fecha2
codigo3 nombre3 categoria3 fecha3
codigo4 nombre4 categoria4 fecha4
codigo5 nombre5 categoria5 fecha5
cuando seleccionan el codigo3 se seleccione el nombre3 + categoria3 + fecha3
eso es lo que necesito.
droezva:
Hola Mira ahi te mando un ejemplo espero que te sirva!!
Mira en el ejemplo tiene dos forma de resolver este problema:
1.- Mediante Lista independientes:
2.- Utilizando Arreglos de Componentes en este Caso List ( Recomendado :) )
Bueno espero que te sirva alguna duda, no dudes en preguntar
Espero que te Sirva.
Nebire:
--- Cita de: "kelmax" ---los list estan con informacion ejemplo
list1 list2 list3 list4
codigo1 nombre1 categoria1 fecha1
codigo2 nombre2 categoria2 fecha2
codigo3 nombre3 categoria3 fecha3
codigo4 nombre4 categoria4 fecha4
codigo5 nombre5 categoria5 fecha5
cuando seleccionan el codigo3 se seleccione el nombre3 + categoria3 + fecha3
eso es lo que necesito.
--- Fin de la cita ---
Si tu selección es siempre unívoca, es decir si al seleccionar codigo3 siempre se ha de seleccionar nombre3 + categoría3 + fecha3, e ídem al selecccionar codigo4, etc... entonces esta construcción usando listas es bastante 'torpe'.
Ya que lo que tu necesitas para este caso es una estructura, dicha estructura es contenida sobre una matriz (o en una colección) y aparte hay un elemento seleccionado, dicho elemento es quien dirige el puntero para saber que elemento de la estructura está seleccionado...
--- Código: Visual Basic --- private type Seleccionable Codigo as long ' suponiendo que sea un número Nombre as string Categoria as string Fecha as dateend type Dim p_Selecciones() as seleccionable ' mantiene una matriz de estructuras. donde cada índice representa un elemento Dim p_Actual as long ' señala el indice actualmente seleccionado de la matrizdim p_Codigo as long ' un puntero único incremental, para asegurarse que no haya 2 códigos iguales Luego puedes añadir código para moodificar los datos de la estructura actual y un par de métodos para añadir elementos y eliminar elementos y por supuesto otro para cambiar la selección a otro elemento.
--- Código: Visual Basic --- ' cuando se decide añadir un nuevo elemento debe invocarse esta función tras recoger, los datos de nombre, categoría y fecha de controles a tal efecto.' la función devuelve un resultado que es el dato que debería añadirse justo al salir de la función al listbox. public Function AñadirElemento(byref Optional Nombre as variant, byref Optional Cat as variant, byref Fecha as variant) as long if (not(p_Selecciones)) <> -1 then ' si la matriz ya está redimensionada... if ubound(p_Selecciones) = ( list1.listcount-1) then ' si la matriz tiene tantos elementos como la lista redim preserve p_Selecciones(0 to list1.listcount + 10) ' añadimos 10 elementos más de golpe... end if p_Codigo = p_Codigo +1 ' el código se auotincrementa con cada nuevo añadido else ' si la matriz no está redimensionada, la redimensionamos, con 10 elementos redim p_Selecciones(0 to 9) p_Codigo = 0 end if p_Actual = list1.listcount + 1 p_Selecciones(p_Actual).Codigo = p_Codigo on local error resume next if not IsMissing(Nombre) then p_Selecciones(p_Actual).Nombre=trim$(cstr( Nombre)) ' si se produce un error, contínua if err.number <> 0 then p_Selecciones(p_Actual).Nombre= cstr(Codigo) err.clear end if end if if not IsMissing(Cat) then p_Selecciones(p_Actual).Categoria=trim$(cstr( Cat)) ' si se produce un error, contínua err.clear end if if not IsMissing(Fecha) then p_Selecciones(p_Actual).Fecha=cdate( Fecha) ' si se produce un error, contínua if err.number <> 0 then p_Selecciones(p_Actual).Fecha= Now err.clear end if end if AñadirElemento= p_Codigoend function public property get Codigo as long ' sólo lectura Codigo = p_Selecciones(p_Actual).Codigo end property public property get Nombre as string ' leemos el nombre actual seleccionado Nombre = p_Selecciones(p_Actual).Nombreend property public property let Nombre(byval n as string) ' cambiamos el nombre del elemento actualmente seleccionado if n <>"" then ' sólo se acepta si la cadena no está vacía... p_Selecciones(p_Actual).Nombre= n else msgbox "El nombre debe tener al menos 1 carácter." ' ó 4, 6, etc... end if end property public property get Categoria as string Categoria = p_Selecciones(p_Actual).Categoria end property public property let Categoria (byval c as string) ' cambiamos la Categoria del elemento actualmente seleccionado if c <>"" then p_Selecciones(p_Actual).Categoria = c else msgbox "No se indicó categoría, no fue cambiada..." ' ó lo que quieras hacer... end if end property public property get Fecha as Date Set Fecha = p_Selecciones(p_Actual).Fecha end property public property set Fecha (byval c as Date) ' cambiamos la Categoria del elemento actualmente seleccionado if not(f) isnothing then set p_Selecciones(p_Actual).Fecha = f else msgbox "No se indicó fecha. La fecha no ha sido cambiada." end if end property public property get Actual as long ' se lee el índice de la matriz que es el actual Actual = p_Actualend property public property let Actual (byval a as long) ' seleccionamos otro dim x as long if (a> -1) and (a<= list1.listcount) then if a <> p_actual then x= p_Actual p_Actual = a ' ahora, antes ' raiseevent SeleccionCambiada( P_Actual, x) ' si tuviéramos un evento quizás nos interesara indicar cuando cambió la selección. end if else msgbox "No existe el elemento " & a & " " & "sigue seleccionado el elemento " & p_Actual end if end property ' ... de igual modo puedes recrear una función para eliminar un eleemnto de la matriz, fíjate que basta con borrarlo de la lista (list1) y luego vaciarlo en la matriz. ' Si la matriz tuviera ahora menos de 10 elementos que la lista, la matriz la redimensionamos con 10 elementos menos ' (no necesita en este caso vaciar el elemento que será eliminado). ' un ejemplo de selección a través del listboxPrivate Sub List1_Click() if list1.listindex > -1 then ' si la lista tiene elementos, entonces lo seleccionamos Actual = list1.listindex ' como hemos supuestamente cambiado la selección, actualizamos los datos...sobre unos textbox o mejor labels.... txtNombre.text = nombre txtCat.text = categoria txtFecha.Text= Fecha end if End Sub Por supuesto te faltaría añadir 2 botones uno para añadir elementos y otro para eliminarlos, si el usuario puede añadirlos y / o eliminarlos desde la interfaz.
Navegación
[#] Página Siguiente
Ir a la versión completa