RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB.NET
Expertise: Intermediate
Mar 17, 2008

Autocomplete Combo Boxes

When you develop an application in Microsoft Access, your combo boxes will, by default, incorporate autocomplete. However, Visual Basic does not include this intrinsic support. If you want autocomplete in VB, you've got to do it yourself. This tip shows you how.

First, you'll need to add some methods to your form:

  • AutoCompleteKeyUp: This method accepts a combo box and KeyEventArgs objects as arguments. When you call this in the KeyUp event of your combo box, the method evaluates what the user has typed and selects the most appropriate match.
  • AutoCompleteLeave: Call this method when the Leave event of your combobox is fired. This method simply takes whatever you've finally chosen and cases it properly, according to the matching selection in the combo box.

Let's look at those functions now:

Public Sub AutoCompleteKeyUp(ByVal Combo As ComboBox, _ 
    ByVal e As KeyEventArgs) 
    Dim strTyped As String 
    Dim intFoundIndex As Integer 
    Dim objFoundItem As Object 
    Dim strFoundText As String 
    Dim strAppendText As String 
    ' Ignore basic selection keys 
    Select Case e.KeyCode 
        Case Keys.Back, Keys.Left, Keys.Right, Keys.Up, _ 
            Keys.Delete, Keys.Down, Keys.CapsLock 
    End Select 
    ' Find what user has typed in list 
    strTyped = Combo.Text 
    intFoundIndex = Combo.FindString(strTyped) 
    ' If found... 
    If intFoundIndex >= 0 Then 
        ' Get list item (actual type depends on whether data bound) 
        objFoundItem = Combo.Items(intFoundIndex) 
        ' Use control to resolve text - in case data bound 
        strFoundText = Combo.GetItemText(objFoundItem) 
        ' Append the typed text to rest of the found string 
        ' (text is set twice due to a combo box quirk: 
        '  on certain platforms, setting just once ignores casing!) 
        strAppendText = strFoundText.Substring(strTyped.Length) 
        Combo.Text = strTyped & strAppendText 
        Combo.Text = strTyped & strAppendText 
        ' Select the appended text 
        Combo.SelectionStart = strTyped.Length 
        Combo.SelectionLength = strAppendText.Length 
    End If 
End Sub 

Public Sub AutoCompleteLeave(ByVal Combo As ComboBox) 
    ' Correct casing when leaving combo 
    Dim intFoundIndex As Integer 
    intFoundIndex = Combo.FindStringExact(Combo.Text) 
    Combo.SelectedIndex = -1 
    Combo.SelectedIndex = intFoundIndex 
End Sub 
And here's how to call these functions from your combo box:

Private Sub ComboBox1_KeyUp(ByVal sender As Object, _ 
    ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyUp 
    AutoCompleteKeyUp(ComboBox1, e) 
End Sub 
Private Sub ComboBox1_Leave(ByVal sender As Object, _ 
    ByVal e As System.EventArgs) Handles ComboBox1.Leave 
End Sub 
Lalit Dwivedi
Close Icon
Thanks for your registration, follow us on our social networks to keep up-to-date