Programming » Visual Basic 6 » Visual Basic 6 Code » Controls » Combobox » ");?>
Add a autocomplete function to a combobox.
'Example for the combobox keypress
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