Visual Basic - Autocompletar DataCombo

Life is soft - evento anual de software empresarial
 
Vista:

Autocompletar DataCombo

Publicado por Marcos (5 intervenciones) el 03/07/2006 19:55:02
Hola! saludos a todos y sin mas vueltas va la pregunta: vi un datacombo que se "autocompleta" a medida que vas ingresando datos (como el combo de acces), ej, si ingreso "a" busca y completa con la primer palabra que empieza con ese valor y va actualizando a medida que se ingresan mas datos. Alguien sabe como hacerlo??? Desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Autocompletar DataCombo - Respuesta a medias

Publicado por Marcos (5 intervenciones) el 04/07/2006 19:36:52
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Autocompletar DataCombo - Respuesta a medias

Publicado por Marcos (5 intervenciones) el 04/07/2006 19:38:48
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar