Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
[SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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, 21:12; editado 1 vez 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: TextBox Y ListBox Situar Elemento Lista Al Principio 
 
gambafeliz escribió:  
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
 




===================
No podemos regresar
 
última edición por shordi el Martes, 16 Julio 2019, 21:59; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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( ).
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio 
 
shordi escribió:  
gambafeliz escribió:  
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 Miercoles, 17 Julio 2019, 00:12; editado 1 vez 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [SOLUCIONADO] TextBox Y ListBox Situar Elemento Lista Al Principio 
 
vuott escribió:  
...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.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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
No puede descargar archivos
No puede publicar eventos en el calendario