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 coincidenicas 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
Aplicación completa en Visual Basic .NET 2005: autocompletar
