Autocompletado de texto en VB.NET

Combobox con función de autocompletado de texto al escribir en Visual Basic .NET

Resumen del ejercicio: a medida que se van escribiendo letras en un cuadro de texto, otro cuadro de texto va mostrando la primera coincidencia de una lista de palabras de un control Combobox (similar a la función Intellisense).

Código en Visual Basic .NET

Utilizamos 2 controles TextBox, en uno escribimos las letras de la palabra buscada y el otro va mostrando la primera coincidencia.

La lista de palabras en las que buscaremos coincidencias están almacenadas en un control ComboBox, en este ejemplo he elegido las palabras reservadas del lenguaje pero puedes emplear cualquier otro ejemplo:

Me.comboBox1.Items.AddRange(New Object() {"AddHandler", "AddressOf", "Alias", "And", "AndAlso", "Ansi", "As", "Assembly", "Auto", "Boolean", "ByRef", "Byte", "ByVal", "Call", "Case", "Catch", "CBool", "CByte", "CChar", "CDate", "CDec", "CDbl", "Char", "CInt", "Class", "CLng", "CObj", "Const", "CShort", "CSng", "CStr", "CType", "Date", "Decimal", "Declare", "Default", "Delegate", "Dim", "DirectCast", "Do", "Double", "Each", "Else", "ElseIf", "End", "Enum", "Erase", "Error", "Event", "Exit", "False", "Finally", "For", "Friend", "Function", "Get", "GetType", "GoTo", "Handles", "If", "Implements", "Imports", "In", "Inherits", "Integer", "Interface", "Is", "Lib", "Like", "Long", "Loop", "Me", "Mod", "Module", "MustInherit", "MustOverride", "MyBase", "MyClass", "Namespace", "New", "Next", "Not", "Nothing", "NotInheritable", "NotOverridable", "Object", "On", "Option", "Optional", "Or", "OrElse", "Overloads", "Overridable", "Overrides", "ParamArray", "Preserve", "Private", "Property", "Protected", "Public", "RaiseEvent", "ReadOnly", "ReDim", "REM", "RemoveHandler", "Resume", "Return", "Select", "Set", "Shadows", "Shared", "Short", "Single", "Static", "Step", "Stop", "String", "Structure", "Sub", "SyncLock", "Then", "Throw", "To", "True", "Try", "TypeOf", "Unicode", "Until", "When", "While", "With", "WithEvents", "WriteOnly", "Xor", "#Const", "#ExternalSource", "#If...Then...#Else", "#Region"})

Se detectan las teclas pulsadas mediante el evento KeyUp en el TextBox en el que escribimos las letras para que al pulsar ESC se vacíe el cuadro de texto:

Private Sub txtEntrada_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtEntrada.KeyUp
If e.KeyCode = Keys.Escape Then ' si pulso ESC vacío la caja de entrada de texto
txtEntrada.Text = ""
comboBox1.SelectedIndex = -1 ' para no elegir ningún elemento
txtPalabra.Text = ""
End If
End Sub

Un procedimiento va buscando coincidencias entre los caracteres tecleados y las palabras almacenadas en el ComboBox, se consigue guardando en una variable de cadena lo que se va escribiendo y buscando esa cadena en el ComboBox con la función FindString que devuelve el índice del elemeto coincidente o -1 si no encuentra coincidencia:

' Si cambio el texto del cuadro de texto txtEntrada
Private Sub txtEntrada_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEntrada.TextChanged

Dim cadena As String ' almacena los caracteres tecleados
Dim indice As Integer ' para buscar la cadena en la lista de elementos

cadena = txtEntrada.Text.ToLower ' cadena almacena los caracteres tecleados (en minúsculas)
indice = comboBox1.FindString(cadena) ' indice referido al ítem que contiene la cadena

' Si hay alguna coincidencia selecciono el elemento en la lista
' En listas y cuadros combinados, SelectedIndex -1 significa ningún ítem seleccionado 
If indice > -1 Then
comboBox1.SelectedIndex = indice ' índice del elemento seleccionado
txtPalabra.Text = comboBox1.Text 'muestra la palabra elegida
ElseIf indice = -1 Then
comboBox1.SelectedIndex = -1 ' para no elegir ningún elemento
txtPalabra.Text = "No hay coincidencia" ' las letras tecleadas no coinciden con alguna entrada
End If

If txtEntrada.Text = "" Then ' si vacío la caja de texto
comboBox1.SelectedIndex = -1 ' para no elegir ningún elemento
txtPalabra.Text = ""
End If

End Sub