https://foro.gambas-es.org/viewtopic.php?f=1&t=7584&p=45172#p45172
-----------------------------------
gambafeliz
Martes, 16 Julio 2019, 23:11

Re: [SOLUCIONADO]  TextBox Y ListBox Situar Elemento Lista Al Principio
-----------------------------------
[quote user="shordi" post="45168"][quote user="gambafeliz" post="45166"]Hola

Estoy haciendo algo recomendado por el amigo shordi

He puesto un TextBox y bajo el un ListBox este último lo cargo con datos de una tabla. En el TextBox escribo y por cada caracter que añado a el, el ListBox selecciona el elemento coincidente pero ojo lo selecciona justo al final de la lista visible. Tengo dos dudas.

1. ¿Como puedo hacer para que ponga ese elemento no al final sino al principio de la lista visible?
2. En el TextBox. Cuando hago un Gotfocus doy visibilidad al ListBox y con LostFocus hago lo contrario, teniendo en cuenta esto, ¿Como puedo hacer un tab de teclado e ir al ListBox para ir al seleccionado y bajar o subir manualmente dentro de la lista de elementos?

====== ¿Es posible borrar esta pregunta? ============[/quote]

Al punto 1:
Para que no se quede el último... busca desde abajo.
Siendo busca el textbox y para el listbox prueba este código:

[code linenumbers=false syntax=gambas]Public Sub busca_KeyRelease()

    Dim n As Integer

    n = Min(para.List.Find(String.Left(busca.Text, busca.Pos) & "*", gb.Like) + (8), para.List.max) 'averiguamos la posición en la lista
    para.index = para.Count 'nos vamos al final
    Wait
    para.index = n 'ahora volvemos a la posición deseada

End[/code]

Para embellecer el tema, después de cargar los registros de la base de datos, añado si la lista permite ver 10, digamos, unas cinco líneas vacías a la lista. Con eso el registro buscado queda, aunque sea el último, a la mitad de la ventana, más o menos...

Al punto 2:
Controlando la pulsación de la tecla tab, claro. En el mismo evento keyrelease, por ejemplo puedes insertar

[code linenumbers=false syntax=gambas]if key.code=key.tab then ...[/code]
De todas formas ya te aviso que debido al orden de ejecución de los distintos eventos de los distintos controles, jugar con cosas de esas (cuando un control pierde el foco hace algo que cuando otro control lo toma hace lo contrario, etc. etc. es un carajal.
Deja la lista visible todo el rato, es mi consejo: Que el comportamiento al teclear sea de búsqueda automática no está reñido con que alguien quiera desplazarse por la lista con el ratón y hacer click. No todo el mundo sabe teclear ni se siente cómodo con cosas que aparecen y desaparecen...

Saludos[/quote]

Perdona shordi mil disculpas pero tu código no funciona como me lo describes. Comprobado!!

Yo hago esto y se que es simple pero funciona tal como quiero con la excepción que no puedo poner la selección el primero por lo demás el funcionamiento me satisface.

Public Sub TextBox1_Change()

  ListBox1.Index = ListBox1.Find(String.Left(TextBox1.Text, String.Len(TextBox1.Text)) & "*", gb.Like) 
  
End

He añadido este otro código pero me falta por hacer para que este totalmente a mi gusto.

Public Sub TextBox1_KeyPress()
  
  If Key.Code = 65293 Then
    Message.Info("Buscar en la base de datos")
  Endif
  
End


Public Sub ListBox1_KeyPress()

  If Key.Code = 65293 Then
    TextBox1.Text = ListBox1.Text
    TextBox1.SetFocus
  Endif

End


