RE:Autocompletar DataCombo - Respuesta a medias
Encontre la solucion a medias, ya que el siguiente codigo logra autocompletar un ComboBox, pero yo noscesito autocompletar un DataCombo ¿Alguien me puede ayudar?
Option Explicit
'Declaración del Api SendMessageLong
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'Flag para la tecla BackSpace
Private KeyRetroceso As Boolean
Private Sub Combo1_Change()
'Le pasamos el ComboBox que queremos, en este caso un Combo1
Autocompletar_Combo Combo1
End Sub
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
'Si la tecla presionada es Backspace o la tecla Delete
Case vbKeyBack, vbKeyDelete
Select Case Len(Combo1.Text)
Case Is <> 0
KeyRetroceso = True
End Select
End Select
End Sub
'A este procedimento le enviamos como parámetro el Control Combo que queremos utilizar.
Public Function Autocompletar_Combo(Combo As ComboBox)
Dim i As Integer, posSelect As Integer
Select Case (KeyRetroceso Or Len(Combo.Text) = 0)
Case True
KeyRetroceso = False
Exit Function
End Select
With Combo
'Recorremos todos los elementos del combo
For i = 0 To .ListCount - 1
'Si hay coincidencia
If InStr(1, .List(i), .Text, vbTextCompare) = 1 Then
posSelect = .SelStart
'Mostramos el texto en el combo
.Text = .List(i)
'Indicamos el comienzo de la selección
.SelStart = posSelect
'Acá seleccionamos el texto
.SelLength = Len(.Text) - posSelect
Exit For
End If
Next i
End With
End Function
'Este procedimiento es para ocultar o desplegar el combo cuando presionamos el enter
Private Sub Combo1_KeyPress(KeyAscii As Integer)
Dim resp As Integer
If KeyAscii = 13 Then
'Si le pasamos a SendMessageLong el valor False lo cierra
resp = SendMessageLong(Combo1.hwnd, &H14F, False, 0)
Else
'si le pasamos True a SendMessageLong lo adespliega, es decir cuando
'presionamos una tecla diferente al Enter
resp = SendMessageLong(Combo1.hwnd, &H14F, True, 0)
End If
End Sub
Private Sub Form_Load()
'Añadimos algunos elementos al combo
With Combo1
.AddItem "Carlos"
.AddItem "Pedro"
.AddItem "Carolina"
.AddItem "Mariano"
.AddItem "Martin"
.AddItem "Laura"
'Selecionamos el primero
.Text = .List(0)
End With
End Sub