ComboBox de búsqueda incremental
El control ComboBox que se incluye con Visual Basic tiene funcionalidad simplista, mientras que muchos controles de otros fabricantes ofrecen características adicionales adicionales. Una de estas características de terceros es la capacidad del control ComboBox para buscar texto y buscar entradas, comenzando por ese texto mientras se escribe texto en el control ComboBox.
Por ejemplo, si escribe las letras "he," el control ComboBox buscará la primera entrada de texto comenzando por "he" y se mostrar el texto completo, como "Hello World".
A continuación se un ejemplo de código que demuestra cómo lograr esta funcionalidad con el control ComboBox que se incluye con Visual Basic.
Ejemplo del paso a paso
- Inicie un proyecto nuevo de Visual Basic. Se creará Form1 de manera predeterminada.
- Colocar un control ComboBox en el formulario.
- Agregue el código siguiente a la ventana de código de Form1:
Option Explicit Private Const WM_SETREDRAW = &HB Private Const KEY_A = 65 Private Const KEY_Z = 90 #If Win32 Then Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Long) As Long #Else Private Declare Function SendMessage Lib "User" ( _ ByVal hwnd As Integer, ByVal wMsg As Integer, _ ByVal wParam As Integer, lParam As Any) As Long #End If Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer) Dim sComboText As String Dim iLoop As Integer Dim sTempString As String Dim lReturn As Long If KeyCode >= KEY_A And KeyCode <= KEY_Z Then 'only look at letters A-Z sTempString = Combo1.Text If Len(sTempString) = 1 Then sComboText = sTempString lReturn = SendMessage(Combo1.hWnd, WM_SETREDRAW, False, 0&) For iLoop = 0 To (Combo1.ListCount - 1) If UCase((sTempString & Mid$(Combo1.List(iLoop), _ Len(sTempString) + 1))) = UCase(Combo1.List(iLoop)) Then Combo1.ListIndex = iLoop Combo1.Text = Combo1.List(iLoop) Combo1.SelStart = Len(sTempString) Combo1.SelLength = Len(Combo1.Text) - (Len(sTempString)) sComboText = sComboText & Mid$(sTempString, Len(sComboText) + 1) Exit For Else If InStr(UCase(sTempString), UCase(sComboText)) Then sComboText = sComboText & Mid$(sTempString, Len(sComboText) _ + 1) Combo1.Text = sComboText Combo1.SelStart = Len(Combo1.Text) Else sComboText = sTempString End If End If Next iLoop lReturn = SendMessage(Combo1.hWnd, _ WM_SETREDRAW, True, 0&) End If End Sub Sub Form_load() Combo1.AddItem "Alpha" Combo1.AddItem "Beta" Combo1.AddItem "Charlie" Combo1.AddItem "Delta" Combo1.AddItem "Dingo" End Sub
- En el menú Ejecutar, haga clic en Inicio o presione la tecla F5 para ejecutar el programa.
Si se escribe la letra "D", observará que "delta" es el texto activo en el ComboBox. Si, a continuación, escribe una "I", se mostrará el texto "Dingo". Todas las siguientes letras que escriba, la siguiente palabra en la lista de control ComboBox comenzará con la secuencia de caracteres que ha escrito.
Nota : la propiedad de estilo del control ComboBox debe ser "0 - combinado de lista desplegable" para que esto funcione correctamente.
Excelente
Con lijeras modificaciones ha funcionado bien
Muchas Gracias