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
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í:
Código:
' Gambas class file
Export
Inherits UserControl
Public Const _Properties As String = "*,Text,List,Height_List,ShowsAllZero"
Public Const _Similar As String = "TextBox"
Private FormMere As Object
Private $txt As TextBox
Private $Lvw As ListView
Property Values As String[]
Private $iValues As New String[] ''Valeur a afficher
Property List As String[]
Private $iList As New String[]
Property Cle As String
Private $iCle As String ''Valeur a afficher
Property Text As String
Private $iText As String
Property Height_List As Float
Private $iHeight_List As Float
Event Change
Event Activate
Event KeyPress
Property ShowsAllZero As Boolean
Private $iShowsAllZero As Boolean
Private Function ShowsAllZero_Read() As Boolean
Return $iShowsAllZero
End
' ... 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.
Un ejemplo que encuentro es con una caja de texto y una lista.

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.
En el caso de usar la caja de texto:
Código:
Public Sub txtNombre_KeyRelease()
Dim x As Integer
If Key.Code <> Key.BackSpace And lstLista.Count <> 0 Then
For x = 0 To lstLista.Count - 1
If InStr(Left(UCase(lstLista[x].Text), Len(txtNombre.Text)), UCase(txtNombre.Text)) <> 0 Then
lstLista.Index = x
Return
Endif
Next
Else
If Len(txtNombre.Text) = 0 Then lstLista.Index = -1
Return
Endif
End
Y usando la propia lista:
Código:
Public Sub lstLista_KeyRelease()
Dim x As Integer
'Si la lista contiene más de un elemento
If lstLista.Count > 1 Then
'Si la tecla retroceso es pulsada
Select Case (Key.Code)
Case Key.BackSpace
'Eliminamos una letra de la variable palabra
palabra = Left(palabra, Len(palabra) - 1)
Case Else
'Añadimos una letra a la variable palabra
palabra &= Chr$(Key.Code)
End Select
'Mostramos en la etiqueta el contenido de la variable palabra
lbpalabra.Text = palabra
If Len(palabra) = 0 Then
'Si la longitud de la palabra es 0, no selecciones ningún elemento.
lstLista.Index = -1
Return
Endif
For x = 0 To lstLista.Count - 1
'Si la subcadena se encuentra en la cadena
If InStr(Left(UCase(lstLista[x].Text), Len(palabra)), UCase(palabra)) <> 0 Then
'Situate en el elemento x de la lista
lstLista.Index = x
Return
Endif
Next
Else
'Lista vacia
Message.Info("No existen elementos en la lista")
Return
Endif
End
¿ Subo el ejemplo ?. Debería estar en el foro antiguo.
Saludos