hay alguna forma
de hacer un combo que cuando escriban una "a", se habra la lista y muestre todas las palabras que empiezan con "a"
porqeu cambiando la propiedade style no hace lo que pretendo
muchas gracias
porqeu cambiando la propiedade style no hace lo que pretendo
muchas gracias
Se puede hacer echando mano de la función API SendMessage.
Aquí te pongo un ejemplo:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CB_FINDSTRING = &H14C
Private Const CB_SHOWDROPDOWN = &H14F
Private Const CB_GETDROPPEDSTATE = &H157
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim oldText As String
If KeyAscii <> 13 Then
If SendMessage(Combo1.hwnd, CB_GETDROPPEDSTATE, 0, 0) = False Then
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, True, 0
Combo1.ListIndex = -1
Combo1.Text = ""
End If
oldText = Combo1.Text
Combo1.ListIndex = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal Combo1.Text)
Combo1.Text = oldText
Combo1.SelStart = Len(oldText)
End If
End Sub
Por supuesto para ver como funciona necesitas un
combobox llamado combo1 con la propiedad Sorted=True
y los datos previamente cargados.
Aquí te pongo un ejemplo:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CB_FINDSTRING = &H14C
Private Const CB_SHOWDROPDOWN = &H14F
Private Const CB_GETDROPPEDSTATE = &H157
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim oldText As String
If KeyAscii <> 13 Then
If SendMessage(Combo1.hwnd, CB_GETDROPPEDSTATE, 0, 0) = False Then
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, True, 0
Combo1.ListIndex = -1
Combo1.Text = ""
End If
oldText = Combo1.Text
Combo1.ListIndex = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal Combo1.Text)
Combo1.Text = oldText
Combo1.SelStart = Len(oldText)
End If
End Sub
Por supuesto para ver como funciona necesitas un
combobox llamado combo1 con la propiedad Sorted=True
y los datos previamente cargados.