Option Explicit
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
Const CB_SHOWDROPDOWN = &H14F
Dim i&, aa$, Tmpstr$(), FindIt As Boolean
Private Sub Form_Load()
Combo1.AddItem "a"
Combo1.AddItem "apple"
Combo1.AddItem "b"
Combo1.AddItem "banana"
Combo1.AddItem "baidu"
Combo1.AddItem "c"
Combo1.AddItem "cs"
Combo1.AddItem "年"
Combo1.AddItem "年龄"
Combo1.AddItem "csd"
Combo1.AddItem "csdn"
For i = 0 To Combo1.ListCount - 1
ReDim Preserve Tmpstr$(i)
Tmpstr(i) = Combo1.List(i)
Next
Call SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
End Sub
Private Sub Combo1_Change()
aa = Combo1.Text
FindIt = False
For i = 0 To Combo1.ListCount - 1
If InStr(1, Tmpstr(i), aa) > 0 Then FindIt = True: Me.Caption = aa & " 已找到,请继续输入下个字": Exit For
Next i
If FindIt = False Then
Combo1.Text = Mid(Combo1.Text, 1, Len(aa) - 1)
Combo1.SelStart = Len(aa)
Me.Caption = "无匹配字符请重新输入"
End If
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Call SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
End Sub
'组合框列表增量查找
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Sub ComboIncrementalSearch(cbo As ComboBox, KeyAscii As Integer)
Static dTimerLast As Double
Static sSearch As String
Static hWndLast As Long
Dim nRet As Long
Const MAX_KEYPRESS_TIME = 0.5
' Weed out characters that are not scanned
If (KeyAscii < 32 Or KeyAscii > 127) Then Exit Sub
If (Timer - dTimerLast) < MAX_KEYPRESS_TIME And hWndLast = cbo.hWnd Then
sSearch = sSearch & Chr$(KeyAscii)
Else
sSearch = Chr$(KeyAscii)
hWndLast = cbo.hWnd
End If
' Search the combo box
nRet = SendMessage(cbo.hWnd, CB_FINDSTRING, -1, ByVal sSearch)
If nRet >= 0 Then
cbo.ListIndex = nRet
End If