[SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio


Objetivo: TextBox Y ListBox Situar Elemento Lista Al Principio
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? ============

última edición por gambafeliz el Martes, 16 Julio 2019, 20:12; editado 1 vez
Perfil MP  
Objetivo: Re: TextBox Y ListBox Situar Elemento Lista Al Principio
gambafeliz escribió: [Ver mensaje]
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? ============


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:

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


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

if key.code=key.tab then ...

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

última edición por shordi el Martes, 16 Julio 2019, 20:59; editado 1 vez
Perfil MP  
Objetivo: Re: [SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio
Ah... al punto 3:
No se puede borrar el post. Lo más correcto es poner la solución que has encontrado, por obvia que te parezca, para aumento y disfrute del resto de foreros, sin obviar que se abre a comentarios y mejoras.

Saludos.

Perfil MP  
Objetivo: Re: TextBox Y ListBox Situar Elemento Lista Al Principio
...al punto 1) es posible tambien un codigo como este ejemplo:

Public Sub Form_Open()

ListBox1.List = ["Abccde", "Abbccddee", "Abbccde", "Abbcd"]

End

Public Sub TextBox1_Change()

Dim ss As String[]
Dim i As Integer

ss = ListBox1.List.Copy(0, ListBox1.List.Count)

For i = 0 To ss.Max
If ss[i] Like TextBox1.Text & "*" Then
ss.Add(ss.Extract(i, 1)[0], 0)
ListBox1.List = ss.Copy(0, ss.Count)
Endif
Next

End


Estoy obligado a usar un array de apoyo (ss), ya que creo que ListBox tenga un bug en su método .Extract( ).

Perfil MP  
Objetivo: Re: [SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio
shordi escribió: [Ver mensaje]
gambafeliz escribió: [Ver mensaje]
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? ============


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:

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


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

if key.code=key.tab then ...

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


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

última edición por gambafeliz el Martes, 16 Julio 2019, 23:12; editado 1 vez
Perfil MP  
Objetivo: Re: [SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio
vuott escribió: [Ver mensaje]
...al punto 1) es posible tambien un codigo como este ejemplo:

Public Sub Form_Open()

ListBox1.List = ["Abccde", "Abbccddee", "Abbccde", "Abbcd"]

End

Public Sub TextBox1_Change()

Dim ss As String[]
Dim i As Integer

ss = ListBox1.List.Copy(0, ListBox1.List.Count)

For i = 0 To ss.Max
If ss[i] Like TextBox1.Text & "*" Then
ss.Add(ss.Extract(i, 1)[0], 0)
ListBox1.List = ss.Copy(0, ss.Count)
Endif
Next

End


Estoy obligado a usar un array de apoyo (ss), ya que creo que ListBox tenga un bug en su método .Extract( ).


Gracias eres muy amable.

Pues sin embargo tu código va bien o exactamente como yo quiero. Pero existe un problema que tengo que resolver y es que aunque busca bien y es lo que quiero ya que lo pone primero en la lista lo buscado, va desordenado toda la lista quedado la lista algo churro. Pero la base me la has dado y voy a analizar donde esta el problema del desorden.

Gracias nuevamente.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4319s (PHP: -77% SQL: 177%)
Consultas SQL: 48 - Debug off - GZIP Activado