Páginas (2): 1 2   
Shordi   10-06-2022, 09:06
#1
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

No podemos regresar
tincho   10-06-2022, 09:31
#2
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]
Última modificación: 10-06-2022, 10:09 por tincho.

1 Saludo.
Shordi   10-06-2022, 10:54
#3
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.
Última modificación: 10-06-2022, 11:30 por Shordi.

No podemos regresar
portaro   10-06-2022, 19:18
#4
Y el codigo texto  de esto como seria ?
Shordi   11-06-2022, 10:17
#5
(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.

No podemos regresar
tincho   11-06-2022, 10:24
#6
(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.
Última modificación: 11-06-2022, 10:25 por tincho.

1 Saludo.
Shordi   11-06-2022, 12:58
#7
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.

No podemos regresar
portaro   11-06-2022, 12:59
#8
Si me referia al de Ticho. Gracias amigos por compartir.
tincho   11-06-2022, 13:28
#9
(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

1 Saludo.
Shell   17-06-2022, 22:58
#10
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:

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

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 5 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.