Visual Basic - Pequeño detalle (Help!)

Life is soft - evento anual de software empresarial
 
Vista:

Pequeño detalle (Help!)

Publicado por nou (17 intervenciones) el 26/04/2006 23:04:10
como hago para que en mi sistema cuando quiero poner un nombre con solo empezar a escribirlo ya me aparezca , por ejemplo Julio, que con solo poner Ju ó J me aparezcan las letras restantes, 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

Usando el Evento _Change ...

Publicado por SemperFiMXL (74 intervenciones) el 27/04/2006 00:38:00
Tendrias que usar el evento _Change del TextBox para validar lo que se lleva tecleado y buscar en alguna lista donde tendras guardados los nombres posibles...

En este ejemplo se usa una matriz de nombres misma que se traslada a un ListBox para su uso como base en el evento _Change... La lista es muy corta pero sirve perfectamente para el ejemplo...

Para probar el codigo, pon un TextBox (Text1) y un ListBox (List1) en una forma, pega el codigo, y ejecutalo ...
Varia la propiedad .Sorted del ListBox de False a True y vuelve a probar (no se puede cambiar esta propiedad desde codigo) ...

'''''''''''''''''''''''''''''
Dim aNombres(22) As String
Dim lAutoChange As Boolean

Private Sub Form_Load()
Dim nPos As Integer

aNombres(0) = "Abdul"
aNombres(1) = "Abigail"
aNombres(2) = "Adan"
aNombres(3) = "Alberto"
aNombres(4) = "Carla"
aNombres(5) = "Danitza"
aNombres(6) = "Eloisa"
aNombres(7) = "Eloy"
aNombres(8) = "Fernando"
aNombres(9) = "Francisco"
aNombres(10) = "Juana"
aNombres(11) = "Judea"
aNombres(12) = "Julio"
aNombres(13) = "Agustin"
aNombres(14) = "Mexico"
aNombres(15) = "España"
aNombres(16) = "Panamá"
aNombres(17) = "Canada"
aNombres(18) = "Costa Rica"
aNombres(19) = "Inglaterra"
aNombres(20) = "Argentina"
aNombres(21) = "Arabia"

' Cargamos el ListBox con los elementos disponibles ...
' En este caso, desde la matriz de ejemplo ...
' La propiedad .SORTED del listbox puede estar activada
' o no estarlo... Si esta activada, el recorrido buscando
' coincidencias con lo tecleado en el textbox sera "mas corto"

Me.List1.Clear
For nPos = 0 To 21
Me.List1.AddItem aNombres(nPos)
Next

lAutoChange = False
End Sub

Private Sub Text1_Change()
Dim nPos As Integer
Dim nSavePos As Integer

' Si el evento _Change lo provoca nuestro codigo al alterar
' el contenido del textbox, entonces salimos sin hacer mas...
' (Evitamos que se genere este evento en cascada) ..

If lAutoChange Then
Exit Sub
End If

' OJO: Encendemos la bandera para en caso de que cambiemos el
' contenido del textbox desde este codigo, no se provoque este evento en cascada

lAutoChange = True

' Salvamos la posicion del cursor dentro del textbox
nSavePos = Me.Text1.SelStart

For nPos = 0 To Me.List1.ListCount - 1

' Si encontramos coincidencia con lo que se lleva tecleado
' actualizamos el textbox con lo encontrado,
' restablecemos la posicion del cursor en el textbox,
' sincronizamos el ListBox con lo encontrado ...
' y salimos del FOR ...

If UCase(Left(Me.Text1.Text, Me.Text1.SelStart)) = UCase(Left(Me.List1.List(nPos), Me.Text1.SelStart)) Then
Me.Text1.Text = Me.List1.List(nPos)
Me.Text1.SelStart = nSavePos
Me.List1.ListIndex = nPos
Exit For
End If

' Si la lista esta sorteada y ya se rebaso el orden
' alfabetico, salimos del FOR sin alterar nada ...
If Me.List1.Sorted = True Then
If UCase(Left(Me.List1.List(nPos), Me.Text1.SelStart)) > UCase(Left(Me.Text1.Text, Me.Text1.SelStart)) Then
Exit For
End If
End If
Next

' Apagamos la bandera para saber que la proxima vez que se
' ejecute este evento es por causa del usuario tecleando
' en el textbox

lAutoChange = False

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