Comunidad Gambas-es

Versión completa: ¿Alguien tiene un combobox que actualice la lista según se escribe?
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Es decir un combobox que cuando se vaya tecleando la lista se desplace mientras haya coincidencia de lo tecleado con los items de la lista.

Me suena que el tema se trató hace tiempo pero no encuentro los hilos. Antes de ponerme a reinventar la rueda, si alguno lo tiene hecho, se agradecería una indicación.

Saludos
En el foro viejo hay algo
https://foro.gambas-es.org/viewtopic.php...as+escribe
https://foro.gambas-es.org/viewtopic.php?f=4&t=1441
Pero creo que lo que buscas esta en el foro francés:
https://gambas-fr.org/code-105-gbtextlist.html
[Imagen: WUbJ5nc.gif]
Luego, por otra parte, este tipo de solución va bien si tienes pocos datos que manejar, pero si tienes cientos o miles de ellos la cosa cambia y , en mi opinión, el combobox no resulta cómodo para la búsqueda de datos.
Por este motivo yo tome otro camino diferente para manejar los datos de las tablas foráneas, mostrando u ocultando un panel con la lista de opciones y el filtro, como se ve debajo en uno de mis programas.
[Imagen: hbopQPs.gif]
El controlillo del foro francés es el que más se ajusta a lo que busco. Gracias.

Pues he buscado en el foro antiguo antes de escribir este post y no he encontrado esas referencias... qué viejo me hago, señol, señol...

Saludos

De todas formas tiene el problema de "convivir" con el resto de controles en formularios o contenedores que usen el Arrangement....

Creo que es un problema insoluble per se.

Saludos.
Y el codigo texto  de esto como seria ?
(10-06-2022, 19:18)portaro escribió: [ -> ]Y el codigo texto  de esto como seria ?

¿Te refieres a lo de Tincho? porque el otro lo tienes en los enlaces que hay más arriba.
(10-06-2022, 19:18)portaro escribió: [ -> ]Y el codigo texto  de esto como seria ?

Busca en el proyecto la clase TextList. no lo pongo aquí porque es muy extenso.
Pero arranca así:
GAMBAS
  1. ' Gambas class file
  2.  
  3.  
  4. Inherits UserControl
  5.  
  6. Public Const _Properties As String = "*,Text,List,Height_List,ShowsAllZero"
  7. Public Const _Similar As String = "TextBox"
  8. Private FormMere As Object
  9.  
  10. Property Values As String[]
  11. Private $iValues As New String[] ''Valeur a afficher
  12. Private $iList As New String[]
  13. Private $iCle As String ''Valeur a afficher
  14. Property Height_List As Float
  15. Private $iHeight_List As Float
  16.  
  17. Event Change
  18. Event Activate
  19. Event KeyPress
  20. Property ShowsAllZero As Boolean
  21. Private $iShowsAllZero As Boolean
  22.  
  23. Private Function ShowsAllZero_Read() As Boolean
  24.  
  25.   Return $iShowsAllZero
  26. ' ... continua



(10-06-2022, 10:54)Shordi escribió: [ -> ]De todas formas tiene el problema de "convivir" con el resto de controles en formularios o contenedores que usen el Arrangement....

Si, este el el motivo por el que decidí usar el otro método que comente antes.
Basado en la idea de Vuott que enlazó Tincho más arriba, he hecho un pequeño control que hace la tarea, a saber: Un combobox que al teclear sobre él se va rellenando con la opción más aproximada de la lista.
Lo que no he podido resolver, y que creo que es imposible con gambas, es mantener el combobox desplegado y que la lista se reubique según se teclea. Es algo que excede el propio combobox, que reside en la librería gráfica qt o gtk, no en gambas.

De todas formas cumple su función. Lo tenéis aquí: https://gambas-es.org/showthread.php?tid=914

No lo he probado demasiado y no me llega a convencer demasiado... pero cumple con su función y no he visto cómo hacerlo mejor. Se aceptan mejoras, bugs y sugerencias.

Saludos.
Si me referia al de Ticho. Gracias amigos por compartir.
(11-06-2022, 12:59)portaro escribió: [ -> ]Si me referia al de Ticho. Gracias amigos por compartir.
Solo para aclarar, si te refieres a la clase gb.TextList, es de Bernard, un usuario del foro francés no mio. https://gambas-fr.org/code-105-gbtextlist.html
Un ejemplo que encuentro es con una caja de texto y una lista. Angel
Permite la búsqueda desde una caja de texto o desde la propia lista usando el teclado.
Ya tiene unos cuantos años el código, por lo mejorable que pueda ser.

[Imagen: j4JSEP0.png]

En el caso de usar la caja de texto:

GAMBAS
  1. Public Sub txtNombre_KeyRelease()
  2.  
  3.  
  4.   If Key.Code <> Key.BackSpace And lstLista.Count <> 0 Then       
  5.     For x = 0 To lstLista.Count - 1     
  6.       If InStr(Left(UCase(lstLista[x].Text), Len(txtNombre.Text)), UCase(txtNombre.Text)) <> 0 Then
  7.         lstLista.Index = x          
  8.         Return      
  9.       Endif      
  10.     Next
  11.   Else
  12.     If Len(txtNombre.Text) = 0 Then lstLista.Index = -1    
  13.     Return
  14.  



Y usando la propia lista:

GAMBAS
  1. Public Sub lstLista_KeyRelease()
  2.  
  3.  
  4.   'Si la lista contiene más de un elemento  
  5.   If lstLista.Count > 1 Then                                                           
  6.     'Si la tecla retroceso es pulsada
  7.     Select Case (Key.Code)                                                             
  8.       Case Key.BackSpace
  9.         'Eliminamos una letra de la variable palabra
  10.         palabra = Left(palabra, Len(palabra) - 1)                                      
  11.       Case Else
  12.         'Añadimos una letra a la variable palabra
  13.         palabra &= Chr$(Key.Code)                                                      
  14.     End Select
  15.     'Mostramos en la etiqueta el contenido de la variable palabra
  16.     lbpalabra.Text = palabra                                                           
  17.     If Len(palabra) = 0 Then                                                           
  18.       'Si la longitud de la palabra es 0, no selecciones ningún elemento.
  19.       lstLista.Index = -1
  20.       Return
  21.     Endif
  22.     For x = 0 To lstLista.Count - 1     
  23.       'Si la subcadena se encuentra en la cadena
  24.       If InStr(Left(UCase(lstLista[x].Text), Len(palabra)), UCase(palabra)) <> 0 Then  
  25.         'Situate en el elemento x de la lista
  26.         lstLista.Index = x                                                             
  27.         Return      
  28.       Endif      
  29.     Next
  30.   Else
  31.     'Lista vacia
  32.     Message.Info("No existen elementos en la lista")                                   
  33.     Return
  34.   Endif  
  35.  



¿ Subo el ejemplo ?. Debería estar en el foro antiguo.

Saludos
Páginas: 1 2