ComboBox con función de autocompletado al ir escribiendo caracteres en un cuadro de texto, con el ComboBox oculto en el formulario, 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 oculto en el formulario (similar a la función Intellisense). Las lista de palabras existentes en la colección se muestran en un control RichTextBox para facilitar la interacción con el usuario.
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 oculto ya que no necesito mostrarlo, solamente utilizar su funcionalidad.
En este ejercicio he elegido palabras reservadas del lenguaje pero puedes emplear cualquier otra lista de palabras. Se añaden por código en las propiedades del ComboBox con el método Items.AddRange de esta forma:
Me.ComboBox1.Items.AddRange(New Object() {"#Const", "#Else", "#ElseIf", "#End", "#If", "AddHandler", "AddressOf", "Alias", "And", "AndAlso", "As", "Boolean", "ByRef", "Byte", "ByVal", "Call", "Case", "Catch", "CBool", "CByte", "CChar", "CDate", "CDbl", "CDec", "Char", "CInt", "Class", "CLng", "CObj", "Const", "Continue", "CSByte", "CShort", "CSng", "CStr", "CType", "CUInt", "CULng", "CUShort", "Date", "Decimal", "Declare", "Delegate", "Dim", "DirectCast", "Do", "Double", "Each", "Else", "ElseIf", "En", "End", "EndIf", "Enum", "Erase", "Error", "Espacio de nombres ", "Event", "False", "Finally", "For", "For Each…Next", "Friend", "Function", "Get", "GetType", "GetXMLNamespace", "Global", "GoSub", "GoTo", "Handles", "Implements", "Imports", "In", "Inherits", "Integer", "Interface", "Is", "IsNot", "Let", "Lib", "Like", "Long", "Loop", "Me", "Mod", "Module", "MustInherit", "MustOverride", "MyBase", "MyClass", "Namespace", "Narrowing", "New", "Not", "Nothing", "NotInheritable", "NotOverridable", "Object", "Of", "On", "Opción", "Operator", "Or", "OrElse", "Out", "Overridable", "Overrides", "ParamArray", "Partial", "Private", "Property", "Protected", "Public", "RaiseEvent", "ReadOnly", "ReDim", "REM", "RemoveHandler", "Resume", "Return", "Salir", "SByte", "Seleccionar", "Set", "Shadows", "Shared", "Short", "Single", "Static", "Step", "Stop", "String", "Structure", "Structure Constraint", "Sub", "SyncLock", "Then", "Throw", "True", "Try", "TryCast", "TypeOf…Is", "UInteger", "ULong", "UShort", "Using", "Variant", "Wend", "When", "While", "Widening", "With", "WithEvents", "WriteOnly", "Xor"})
Cada vez que cambia el texto del TextBox de entrada de caracteres(cada vez que escribimos algo) el programa va buscando coincidencias entre los caracteres tecleados y las palabras almacenadas en el ComboBox, esto se consigue guardando en una variable de cadena lo que se va escribiendo y buscando esa cadena en los ítems del ComboBox con FindString que devuelve el índice del elemento coincidente o -1 si no encuentra coincidencia. En el ComboBox se selecciona el ítem que corresponde al índice y ese ítem se muestra en el otro TextBox destinado a mostrar las palabras encontradas.
' Si cambio el texto del cuadro de texto TextBoxEntrada Private Sub TextBoxEntrada_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxEntrada.TextChanged Dim cadena As String ' almacena los caracteres tecleados Dim indice As Integer ' para buscar la cadena en la lista de elementos cadena = TextBoxEntrada.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 TextBoxPalabras.Text = ComboBox1.SelectedItem.ToString ElseIf indice = -1 Then ComboBox1.SelectedIndex = -1 ' para no elegir ningún elemento TextBoxPalabras.Text = "" End If If TextBoxEntrada.Text = "" Then ' si vacío la caja de texto ComboBox1.SelectedIndex = -1 ' para no elegir ningún elemento TextBoxPalabras.Text = "" End If End Sub
Puedes descargar la aplicación completa en Visual Studio 2017 desde aquí.