En este proyecto simulamos un ListBox que es un campo que a medida que se escribe despliega una lista con las coincidencias encontradas.
En el proyecto se uso un TextBox que es donde el usuario escribe las palabras claves y se uso un List para mostrar la lista de coincidencias, este proyecto hace una consulta a una base de datos que contiene un tabla Alumnos.
Al escribir sobre el campo de la izquierda se despliega en List con las coincidencias.
Al presionar en el teclado la tecla flecha Abajo automáticamente se pasa a la lista para poder moverse en el listado de coincidencias. Los procedimientos usados fueron:
La Conexión:
Dim ConexionADO As New ADODB.Connection Dim Record As New ADODB.Recordset Sub Conectar() ConexionADO.CursorLocation = adUseClient ConexionADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "/BaseDatos.accdb" _ & ";Jet OLEDB:Database Password=" End Sub
Procedimiento que carga el List.
Sub MostarLista() 'Se filtra usando like para que busque todas las coincidencias que tengas los caracteres escritos en el campo txtFiltrar sql = "Select * From Alumnos Where nombre_apellidos_al Like '%" & txtFiltrar.Text & "%' order by nombre_apellidos_al ASC " Set Record = ConexionADO.Execute(sql) If Len(txtFiltrar.Text) > 2 Then 'solo se muestra la lista si hay mas de 2 carácteres listAlumnos.Clear 'Se limpia el List If Record.RecordCount > 0 Then 'Si se encontraron registros Indice = 0 Do While Not Record.EOF listAlumnos.AddItem Record("nombre_apellidos_al") 'se agrega el nombre del alumno a la lista listAlumnos.ItemData(Indice) = Record("codigo_al") ' se guarda el Codigo del alumno Record.MoveNext Indice = Indice + 1 Loop listAlumnos.Top = 600 'Posición superior del control listAlumnos.Left = 360 'Posición derecha listAlumnos.Visible = True Else listAlumnos.Visible = False 'si no hay registros se oculta la lista End If Else listAlumnos.Visible = False 'si no son mas de 2 caracteres se oculta la lista End If End Sub
Procedimiento que llena los campos dependiendo del Alumno seleccionado en la lista:
Sub FiltrarAlumnosLista() If listAlumnos.ListIndex >= 0 Then 'si selecciono un elemento de la lista CodAlumn = listAlumnos.ItemData(listAlumnos.ListIndex) 'se optiene el codigo del alumno seleccionado en la lista Record.Filter = "codigo_al=" & Val(CodAlumn) 'se filtra el Recorset por el codigo del alumno If Record.RecordCount > 0 Then 'si se encontraron registros se llenan los campos txtFiltrar.Text = listAlumnos.Text txtCodigo.Text = Record("codigo_al") txtNombre.Text = Record("nombre_apellidos_al") txtTelefono.Text = Record("telefono") txtDireccion.Text = Record("direccion") Else Call LimpiarCampos End If Else Call LimpiarCampos End If End Sub
Eventos del Control List:
Private Sub listAlumnos_Click() Call FiltrarAlumnosLista End Sub Private Sub listAlumnos_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 40 Or KeyCode = 38 Then 'Si se preciona flecha abajo o flecha Arriba Call FiltrarAlumnosLista End If If KeyCode = 13 Then 'Si se preciona Enter listAlumnos.Visible = False txtCodigo.SetFocus End If If KeyCode = 27 Then 'Si Se preciona ESC txtFiltrar.SetFocus listAlumnos.Visible = False End If End Sub
Eventos del control Filtrar:
Private Sub txtFiltrar_GotFocus() txtFiltrar.SelStart = 0 txtFiltrar.SelLength = Len(txtFiltrar.Text) End Sub Private Sub txtFiltrar_KeyUp(KeyCode As Integer, Shift As Integer) Call MostarLista If KeyCode = 40 Then If listAlumnos.Visible = True Then listAlumnos.SetFocus End If End If End Sub
Este es el código del Proyecto: Descargar