• Sábado 21 de Diciembre de 2024, 11:25

Autor Tema:  Varios listbox  (Leído 3429 veces)

kelmax

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Varios listbox
« en: Martes 23 de Febrero de 2010, 21:30 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Varios listbox
« Respuesta #1 en: Viernes 5 de Marzo de 2010, 08:44 »
0
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
  1.  ' Primero lleno el primer list
  2. rs.open "SELECT * FROM Paises"
  3. While Not rs.EOF = True
  4.     Lst1.AddItem rs!nombre_pais
  5.     Lst1.ItemData(Lst1.NewIndex) = rs!id_pais
  6.     rs.MoveNext
  7. Wend
  8.  
  9. ' En el evento "click de lst1" cargo los datos al lst2
  10. rs.Open "SELECT * From Ciudades Where Id_pais = '" & lst1.ItemData(lst1.ListIndex) & "'"
  11. lst2.Additem rs!nombre_ciudad
  12. rs.movenext
  13.  
  14.  

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

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Varios listbox
« Respuesta #2 en: Viernes 5 de Marzo de 2010, 21:55 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Varios listbox
« Respuesta #3 en: Sábado 6 de Marzo de 2010, 17:33 »
0
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.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Varios listbox
« Respuesta #4 en: Domingo 7 de Marzo de 2010, 12:45 »
0
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.

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
  1.  
  2. private type Seleccionable
  3.      Codigo as long            ' suponiendo que sea un número
  4.      Nombre as string
  5.      Categoria as string
  6.      Fecha as date
  7. end type
  8.  
  9. Dim p_Selecciones() as seleccionable   '  mantiene una matriz de estructuras. donde cada índice representa un elemento 
  10. Dim p_Actual as long   ' señala el indice actualmente seleccionado de la matriz
  11. dim p_Codigo as long  '  un puntero único incremental, para asegurarse que no haya 2 códigos iguales
  12.  
  13.  
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
  1.  
  2.  
  3. ' 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.
  4. ' la función devuelve un resultado que es el dato que debería añadirse justo al salir de la función al listbox.
  5. public Function AñadirElemento(byref Optional Nombre as variant, byref Optional Cat as variant, byref Fecha as variant) as long
  6.         if  (not(p_Selecciones)) <> -1 then   ' si la matriz ya está redimensionada...
  7.               if  ubound(p_Selecciones) = ( list1.listcount-1)  then   ' si la matriz tiene tantos elementos como la lista
  8.                    redim preserve p_Selecciones(0 to  list1.listcount + 10)  ' añadimos 10 elementos más de golpe...
  9.               end if
  10.               p_Codigo = p_Codigo +1  ' el código se auotincrementa con cada nuevo añadido
  11.         else                                              ' si la matriz no está redimensionada, la redimensionamos, con 10 elementos
  12.              redim p_Selecciones(0 to 9)
  13.              p_Codigo = 0
  14.         end if
  15.  
  16.        p_Actual = list1.listcount + 1
  17.        p_Selecciones(p_Actual).Codigo = p_Codigo
  18.  
  19.        on local error resume next
  20.        if not  IsMissing(Nombre) then
  21.               p_Selecciones(p_Actual).Nombre=trim$(cstr( Nombre))  ' si se produce un error, contínua
  22.              if err.number <> 0 then
  23.                   p_Selecciones(p_Actual).Nombre= cstr(Codigo)
  24.                   err.clear
  25.              end if      
  26.       end if
  27.       if not  IsMissing(Cat) then
  28.               p_Selecciones(p_Actual).Categoria=trim$(cstr( Cat))  ' si se produce un error, contínua
  29.              err.clear
  30.        end if
  31.       if not  IsMissing(Fecha) then
  32.               p_Selecciones(p_Actual).Fecha=cdate( Fecha)  ' si se produce un error, contínua
  33.               if err.number <> 0 then
  34.                   p_Selecciones(p_Actual).Fecha= Now
  35.                   err.clear
  36.              end if
  37.        end if
  38.  
  39.         AñadirElemento= p_Codigo
  40. end function
  41.  
  42. public property get Codigo as long  ' sólo lectura
  43.          Codigo = p_Selecciones(p_Actual).Codigo
  44. end property
  45.  
  46. public property get Nombre as string                ' leemos el nombre actual seleccionado
  47.           Nombre = p_Selecciones(p_Actual).Nombre
  48. end property
  49.      public property let Nombre(byval n as string)   ' cambiamos el nombre del elemento actualmente seleccionado
  50.               if n <>"" then     ' sólo se acepta si la cadena no está vacía...
  51.                   p_Selecciones(p_Actual).Nombre= n
  52.              else
  53.                   msgbox "El nombre debe tener al menos 1 carácter."  ' ó 4, 6, etc...
  54.              end if
  55.      end property
  56.  
  57. public property get Categoria as string
  58.           Categoria = p_Selecciones(p_Actual).Categoria
  59. end property
  60.      public property let Categoria (byval c as string)   ' cambiamos la Categoria del elemento actualmente seleccionado
  61.               if c <>"" then
  62.                   p_Selecciones(p_Actual).Categoria = c
  63.              else
  64.                   msgbox "No se indicó categoría, no fue cambiada..."  ' ó  lo que quieras hacer...
  65.              end if
  66.      end property
  67.  
  68. public property get Fecha as Date
  69.           Set Fecha = p_Selecciones(p_Actual).Fecha
  70. end property
  71.      public property set Fecha (byval c as Date)   ' cambiamos la Categoria del elemento actualmente seleccionado
  72.               if not(f) isnothing then
  73.                   set p_Selecciones(p_Actual).Fecha = f
  74.              else
  75.                  msgbox "No se indicó fecha. La fecha no ha sido cambiada."
  76.             end if
  77.      end property
  78.  
  79. public property get Actual as long   '  se lee el índice de la matriz que es el actual
  80.           Actual = p_Actual
  81. end property
  82.      public property let Actual (byval a as long)   '  seleccionamos otro
  83.               dim x as long
  84.               if (a> -1) and (a<= list1.listcount) then
  85.                    if a <> p_actual then
  86.                        x= p_Actual
  87.                        p_Actual = a                             ' ahora, antes
  88.                        ' raiseevent SeleccionCambiada( P_Actual, x)  ' si tuviéramos un evento quizás nos interesara indicar cuando cambió la selección.
  89.                    end if
  90.              else
  91.                  msgbox "No existe el elemento " & a & " " & "sigue seleccionado el elemento " & p_Actual  
  92.             end if
  93.      end property
  94.  
  95.  '  ... 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.
  96. '        Si la  matriz tuviera ahora menos de 10 elementos que la lista, la matriz la redimensionamos con 10 elementos menos
  97. '       (no necesita en este caso vaciar el elemento que será eliminado).
  98.  
  99.  
  100. '  un ejemplo de selección a través del listbox
  101. Private Sub List1_Click()
  102.        if list1.listindex > -1 then  ' si la lista tiene elementos, entonces lo seleccionamos
  103.                  Actual = list1.listindex
  104.                  '  como hemos supuestamente cambiado la selección, actualizamos los datos...sobre unos textbox o mejor labels....
  105.                  txtNombre.text = nombre
  106.                  txtCat.text = categoria
  107.                  txtFecha.Text= Fecha
  108.        end if  
  109. End Sub
  110.  
  111.  
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.
«Ma non troppo»
----> ModoVacaciones = False<----

kelmax

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Varios listbox
« Respuesta #5 en: Viernes 29 de Octubre de 2010, 15:35 »
0
gracias me sirvi la ayuda.