Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

ListBox. Buscar coincidencias
#1

Buenas!

Hice un ejemplo para buscar en el contol listbox.
He usado dos controles, una caja de texto y un listbox.
He creado tres ejemplos.

Código Común:

GAMBAS
  1. Public Const NUMDEELEMENTOS As Integer = 100
  2. Public valores As String[]
  3.  
  4. Public Sub LlenadoDelista() As String[]
  5.  
  6.   Dim nom As String
  7.   Dim acadenas As New String[]
  8.  
  9.   For i = 0 To NUMDEELEMENTOS
  10.     For n = 0 To 2
  11.       nom &= Chr(Rand(65, 90))
  12.     Next
  13.     nom &= Format(Rand(1, 100), "000")
  14.     acadenas.Add(nom)
  15.     nom = ""
  16.   Next
  17.  
  18.   Return acadenas
  19.  



Primer ejemplo. Busca y muestra una coincidencia.

[Imagen: 7dxuHqa.png]

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Me.Text = "Busqueda en ListBox"
  4.   lstElementos.List = Comun.LlenadoDelista()
  5.   lstElementos.Sorted = True
  6.   Comun.valores = lstElementos.List
  7.   txtEntrada.SetFocus()
  8.  
  9.  
  10. Public Sub txtEntrada_Change()
  11.  
  12.   Dim coincidencia As Boolean
  13.  
  14.   txtEntrada.Text = UCase(txtEntrada.Text)
  15.   lstElementos.List = Comun.valores
  16.  
  17.   If Not IsNull(txtEntrada.Text) Then
  18.     While x < lstElementos.count And Not coincidencia
  19.       If InStr(Trim(Left(lstElementos[x].Text, Len(txtEntrada.text))), Trim(txtEntrada.Text)) <> 0 Then
  20.         lstElementos.Index = x
  21.         coincidencia = True
  22.       Endif
  23.       If Not coincidencia Then x += 1
  24.     Wend
  25.  



Segundo Ejemplo. Busca y muestra una coincidencia.

Estoy interesado en este ya que usa una constante gb.like. El efecto cuando busca no siempre es correcto.
Imaginar que busco elementos que comienzan con la "z", pues hay veces que si hay más de una coincidencia, se salta el primero. Huh
El problema se encuentra en la constante que usa el método "find". O que no lo uso de una forma correcta.

[Imagen: U8d1Dwb.png]

Se ha saltado el primero.

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Me.Text = "Busqueda en ListBox"
  4.   lstElementos.Sorted = True
  5.   lstElementos.List = Comun.LlenadoDelista()
  6.   Comun.valores = lstElementos.List
  7.   txtEntrada.SetFocus()
  8.  
  9.  
  10. Public Sub txtEntrada_Change()
  11.  
  12.   txtEntrada.Text = Trim(UCase(txtEntrada.Text))
  13.   lstElementos.List = Comun.valores
  14.  
  15.   If Not IsNull(txtEntrada.text) Then lstElementos.Index = lstElementos.Find(txtEntrada.text & "*", gb.Like) 'No funciona siempre correctamente
  16.  



Tercer ejemplo, muestra todos los elementos que coinciden con el texto que busco.


GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Me.Text = "Busqueda en ListBox"
  4.   lstElementos.List = Comun.LlenadoDelista()
  5.   lstElementos.Sorted = True
  6.   Comun.valores = lstElementos.List
  7.   txtEntrada.SetFocus()
  8.  
  9.  
  10. Public Sub txtEntrada_Change()
  11.  
  12.   Dim listaencontrados As New String[]
  13.  
  14.   txtEntrada.Text = UCase(txtEntrada.Text)
  15.   lstElementos.List = Comun.valores
  16.  
  17.   If Not IsNull(txtEntrada.text) Then
  18.     If lstElementos.Count > 0 Then
  19.       For x = 0 To lstElementos.Count - 1
  20.         If InStr(Left(lstElementos[x].Text, Len(txtEntrada.Text)), txtEntrada.Text) > 0 Then
  21.           lstElementos.Index = x
  22.           listaencontrados.Add(lstElementos[lstElementos.Index].Text)
  23.         Endif
  24.       Next
  25.       lstElementos.List = listaencontrados
  26.     Else
  27.       lstElementos.Index = -1
  28.     Endif
  29.  



Os subo el ejemplo. Tiene tres formularios, seleccionar uno de ellos y o bien ejecutarlo como correr esta clase ó como clase de inicio.

Saludos


Archivos adjuntos
.gz BusquedaEnListBox-0.0.1.tar.gz Tamaño: 12.78 KB  Descargas: 3

"Pero no toques, por qué tocas? - Amador"
[-] Los siguientes 1 usuarios dice gracias a Shell por este post:
  • Grandamakulo
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por vuott
23-09-2020, 16:54
Último mensaje por calcena
06-08-2020, 15:04

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)