Programación General > Visual Basic para principiantes

 Varios listbox

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa