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:
Código:
Public Const NUMDEELEMENTOS As Integer = 100
Public valores As String[]
Public Sub LlenadoDelista() As String[]
Dim n As Integer
Dim i As Integer
Dim nom As String
Dim acadenas As New String[]
For i = 0 To NUMDEELEMENTOS
For n = 0 To 2
nom &= Chr(Rand(65, 90))
Next
nom &= Format(Rand(1, 100), "000")
acadenas.Add(nom)
nom = ""
Next
Return acadenas
End
Primer ejemplo. Busca y muestra una coincidencia.
Código:
Public Sub Form_Open()
Me.Text = "Busqueda en ListBox"
lstElementos.List = Comun.LlenadoDelista()
lstElementos.Sorted = True
Comun.valores = lstElementos.List
txtEntrada.SetFocus()
End
Public Sub txtEntrada_Change()
Dim x As Integer
Dim coincidencia As Boolean
txtEntrada.Text = UCase(txtEntrada.Text)
lstElementos.List = Comun.valores
If Not IsNull(txtEntrada.Text) Then
While x < lstElementos.count And Not coincidencia
If InStr(Trim(Left(lstElementos[x].Text, Len(txtEntrada.text))), Trim(txtEntrada.Text)) <> 0 Then
lstElementos.Index = x
coincidencia = True
Endif
If Not coincidencia Then x += 1
Wend
Endif
End
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.
El problema se encuentra en la constante que usa el método "find". O que no lo uso de una forma correcta.
Se ha saltado el primero.
Código:
Public Sub Form_Open()
Me.Text = "Busqueda en ListBox"
lstElementos.Sorted = True
lstElementos.List = Comun.LlenadoDelista()
Comun.valores = lstElementos.List
txtEntrada.SetFocus()
End
Public Sub txtEntrada_Change()
txtEntrada.Text = Trim(UCase(txtEntrada.Text))
lstElementos.List = Comun.valores
If Not IsNull(txtEntrada.text) Then lstElementos.Index = lstElementos.Find(txtEntrada.text & "*", gb.Like) 'No funciona siempre correctamente
End
Tercer ejemplo, muestra todos los elementos que coinciden con el texto que busco.
Código:
Public Sub Form_Open()
Me.Text = "Busqueda en ListBox"
lstElementos.List = Comun.LlenadoDelista()
lstElementos.Sorted = True
Comun.valores = lstElementos.List
txtEntrada.SetFocus()
End
Public Sub txtEntrada_Change()
Dim x As Integer
Dim listaencontrados As New String[]
txtEntrada.Text = UCase(txtEntrada.Text)
lstElementos.List = Comun.valores
If Not IsNull(txtEntrada.text) Then
If lstElementos.Count > 0 Then
For x = 0 To lstElementos.Count - 1
If InStr(Left(lstElementos[x].Text, Len(txtEntrada.Text)), txtEntrada.Text) > 0 Then
lstElementos.Index = x
listaencontrados.Add(lstElementos[lstElementos.Index].Text)
Endif
Next
lstElementos.List = listaencontrados
Else
lstElementos.Index = -1
Endif
Endif
End
Os subo el ejemplo. Tiene tres formularios, seleccionar uno de ellos y o bien ejecutarlo como correr esta clase ó como clase de inicio.
Saludos