Autobúsqueda en un combo de sólo lectura
Fecha: 24/Ago/98 (18/Ago/98)
Autor: Harvey [email protected]
![]()
Existen casos en que un ComboBox debe ser de solo lectura y queremos tenga la capacidad de autobusqueda. El caso común es en una consulta INNER JOIN, donde enlazamos una tabla de soporte para que suministre opciones al usuario, si permitimos que se escriba el ComboBox, puede suceder que cambiamos la tabla de soporte o nos ganamos errores de bloqueo del motor. Bien, en un ComboBox normalito (lo llamo cbx)
'
Private KeyChar As String
'...
Private Sub cbx_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
'//Skip to next control
KeyAscii = 0
SendKeys "{TAB}"
Else
KeyChar = Chr(KeyAscii)
KeyAscii = 0
SearchFirtsItem
End If
End Sub
Private Sub cbx_KeyDown(KeyCode As Integer, Shift As Integer)
DoEvents
Select Case KeyCode
Case vbKeyDown, vbKeyUp
Case Else
KeyCode = 0
End Select
End Sub
Private Sub SearchFirtsItem()
Dim i As Integer
Dim n As Integer
Static LastFound As Integer
Static LastChar As String
If Not KeyChar = LastChar Then
LastFound = -99
LastChar = KeyChar
End If
n = 1
With cbx
For i = 0 To .ListCount - 1
If StrComp(KeyChar, Left(.List(i), n), 1) = 0 Then
If i > LastFound Then
.ListIndex = i
.Text = .List(.ListIndex)
.SelStart = 0
.SelLength = Len(.Text)
LastFound = i
Exit For
End If
End If
Next
End With
End Sub
P.e., si el usuaio teclea "C", entonces el ubica el primer item que empieza con "C", si se vuelque a dar "C", ubica el siguiente, y así.
![]()