¿Búsqueda en recordset asociado a listbox?

Te agradecería me explicaras a ser posible con código lo siguiente:
Tengo un listbox donde cargo el campo nombre de todos los registros de un recordset.
Sobre el listbox he puesto un texbox con el propósito de buscar nombres.
A medida que voy escribiendo letras en el textbox quiero que que vaya posicionándose en el primer nombre que coincida con las letras escritas y a continuación de las letras que yo voy escribiendo saldrá el resto del nombre (si lo encuentra) pero seleccionado para poder seguir escribiendo.
Creo que es bastante típico pero no termino de conseguirlo.
He hecho pruebas con la propiedad change del textbox pero no consigo que funcione como me gustaría.
¿Tienes algún ejemplo que haga esto?

1 Respuesta

Respuesta
1
Trata con esto:
Declaramos en el formulario :
Private Const WM_SETREDRAW = &HB
Private Const KEY_A = 65
Private Const KEY_Z = 90
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long _
, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Y en el evento KeyUp del combobox :
Dim sComboText As String
Dim iLoop As Integer
Dim sTempString As String
Dim lReturn As Long
If KeyCode >= KEY_A And KeyCode <= KEY_Z Then
'buscar sólo la letras entre la A y la Z
sTempString = Combo1.Text
If Len(sTempString) = 1 Then sComboText = sTempString
lReturn = SendMessage(Combo1.hwnd, WM_SETREDRAW, False, 0&)
For iLoop = 0 To (Combo1.ListCount - 1)
If UCase((sTempString & Mid$(Combo1.List(iLoop), Len(sTempString) + 1))) = UCase(Combo1.List(iLoop)) Then
Combo1.ListIndex = iLoop
Combo1.Text = Combo1.List(iLoop)
Combo1.SelStart = Len(sTempString)
Combo1.SelLength = Len(Combo1.Text) - (Len(sTempString))
sComboText = sComboText & Mid$(sTempString, Len(sComboText) + 1)
Exit For
Else
If InStr(UCase(sTempString), UCase(sComboText)) Then
sComboText = sComboText & Mid$(sTempString, Len(sComboText) + 1)
Combo1.Text = sComboText
Combo1.SelStart = Len(Combo1.Text)
Else
sComboText = sTempString
End If
End If
Next iLoop
lReturn = SendMessage(Combo1.hwnd, WM_SETREDRAW, True, 0&)
End If
No lo he probado pero parece que funciona.
Saludos
Roberto Alvarado
Cartagena - Colombia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas