VB Coding Tip: Type Ahead Combo Box
Would you like to force users to select an itme from your combo box list and also allow them to just type the first few cahracters of a list item to bring the desired item into focus? Here is the API and code to do it.
Private Sub MyCombo_KeyPress( _
KeyAscii As Integer)
KeyAscii = AutoFind( MyCombo, _
KeyAscii, _
False)
End Sub
Put this in the Declarations Section:
Public Const CB_FINDSTRING = &H14C
Public Const CB_ERR = (-1)
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 Function AutoFind( _
ByRef cboCurrent As ComboBox, _
ByVal KeyAscii As Integer, _
Optional ByVal LimitToList As Boolean = False)
Dim lCB As Long
Dim sFindString As String
On Error GoTo Err_Handler
If KeyAscii = 8 Then
If cboCurrent.SelStart <= 1 Then
cboCurrent = ""
AutoFind = 0
Exit Function
End If
If cboCurrent.SelLength = 0 Then
sFindString = UCase(Left(cboCurrent, _
Len(cboCurrent) - 1))
Else
sFindString = Left$(cboCurrent.Text, _
cboCurrent.SelStart - 1)
End If
ElseIf KeyAscii < 32 Or KeyAscii > 127 Then
Exit Function
Else
If cboCurrent.SelLength = 0 Then
sFindString = UCase(cboCurrent.Text & _
Chr$(KeyAscii))
Else
sFindString = Left$(cboCurrent.Text, _
cboCurrent.SelStart) & _
Chr$(KeyAscii)
End If
End If
lCB = SendMessage(cboCurrent.hWnd, _
CB_FINDSTRING, _
-1, _
ByVal sFindString)
If lCB <> CB_ERR Then
cboCurrent.ListIndex = lCB
cboCurrent.SelStart = Len(sFindString)
cboCurrent.SelLength = Len(cboCurrent.Text) - _
cboCurrent.SelStart
AutoFind = 0
Else
If LimitToList = True Then
AutoFind = 0
Else
AutoFind = KeyAscii
End If
End If
End Function
0 Comments (click to add your comment)
Networking Solutions



Solid state disks (SSDs) made a splash in consumer technology, and now the technology has its eyes on the enterprise storage market. Download this eBook to see what SSDs can do for your infrastructure and review the pros and cons of this potentially game-changing storage technology.