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.