elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Mover al siguiente elemento igual en un listbox
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mover al siguiente elemento igual en un listbox  (Leído 4,496 veces)
RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Mover al siguiente elemento igual en un listbox
« en: 14 Abril 2018, 03:31 am »

Tengo este codigo robado de por ahí...  ;D que hace lo que quiero casi a la perfeccion.

LO que hace, a medida q voy escribiendo me va  encontrando las coincidencias en eel list box, en el orden q sea, cuantas entradas sean, sin importar orden ni mayusculas ni minusculas (es realmente muy bueno) Pero tiene un detalle que me gustaria solucionar.

Me gustaria q cada vez q aprieto el enter, o sea el la key13 del evento keypress del textbox, la seleccion se desplaze hacia la siguiente coincidencia, que no se quede siempre en la misma. Que tendria que agregarla al codigo? Saludos!!

Código:
Function ListIsIn(lst As ListBox, zString As String) As Boolean
    On Error Resume Next
   
    For i = 0 To lst.ListCount
        If InStr(UCase$(lst.List(i)), UCase$(zString)) Then ListIsIn = True: lst.ListIndex = i: GoTo grr
        i = i + 1
    Next i
    ListIsIn = False
grr:
End Function

Private Sub Command1_Click()
    Me.Caption = ListIsIn(List1, Text1.Text)
End Sub

Private Sub Form_Load()
    List1.AddItem "MÉXICO" & " Pepe "
    List1.AddItem "VENEZUELA" & "Jose"
    List1.AddItem "ARGENTINA"
    List1.AddItem "ESPAÑA"
    List1.AddItem "GUATEMALA"
    List1.AddItem "ARGENTINA"
    List1.AddItem "CHILE"
End Sub

Private Sub Text1_Change()
   Label1.Caption = ListIsIn(List1, Text1.Text)
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then

End If

End Sub



de Yapa pregutno, q modificacion le hago para hacer esto mismo en un listvew?



En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Mover al siguiente elemento igual en un listbox
« Respuesta #1 en: 14 Abril 2018, 18:39 pm »

Modificando algo tu propio código... pero mejor copia todo y pégalo (antes comenta todo ese código que tienes)


Código
  1. Private s_IndexActual  As Long
  2.  
  3.  
  4.  
  5. Private Sub BuscarPatron(ByRef lst As ListBox, ByRef Patron As String)
  6.    ' almacenamos el índice obtenido en una variable a nivel de módulo.
  7.    ' la búsqueda comenzará un índice más alla del actual...
  8.    ' convertimos patrona  amayúsculas antes de enviarlo a la función, así el bucle no necesita hacerlo en cada iteración.
  9.    s_IndexActual = IndexEnLista(lst, UCase$(Patron))
  10.    ' Si se halló, se hace ese ítem actual, si no;
  11.    '     se deselecciona (indice= -1), y en la próxima búsqueda comenzaría en: -1 + 1 = 0
  12.    lst.ListIndex = s_IndexActual
  13.  
  14.    Me.Caption = "Indice: " & CStr(s_IndexActual)
  15. End Sub
  16.  
  17. Private Function IndexEnLista(ByRef lst As ListBox, ByRef Patron As String) As Long
  18.    Dim k As Long
  19.  
  20.    On Error Resume Next
  21.  
  22.    ' Busca desde siguiente al actual hasta el final
  23.    For k = (s_IndexActual + 1) To lst.ListCount
  24.        If InStr(UCase$(lst.List(k)), Patron) Then
  25.            IndexEnLista = k
  26.            Exit Function
  27.        End If
  28.    Next
  29.    ' y si no se hallo en ese tramo, busca desde el comienzo hasta el actual.
  30.    For k = 0 To s_IndexActual
  31.        If InStr(UCase$(lst.List(k)), Patron) Then
  32.            IndexEnLista = k
  33.            Exit Function
  34.        End If
  35.    Next
  36.  
  37.    ' Si no se encuentra de ninguna manera, deselecciona la lista (valor -1)
  38.    IndexEnLista = -1
  39. End Function
  40.  
  41. Private Sub Command1_Click()
  42.    Call BuscarPatron(List1, Text1.Text)
  43. End Sub
  44.  
  45. Private Sub Form_Load()
  46.    List1.AddItem "MÉXICO" & " Pepe "
  47.    List1.AddItem "VENEZUELA" & " Jose"
  48.    List1.AddItem "ARGENTINA"
  49.    List1.AddItem "ESPAÑA"
  50.    List1.AddItem "GUATEMALA"
  51.    List1.AddItem "ARGENTINA"
  52.    List1.AddItem "CHILE"
  53. End Sub
  54.  
  55. Private Sub Text1_Change()
  56.    Call BuscarPatron(List1, Text1.Text)
  57.     'list1.text contiene el valor del ítem actualmente seleccionado, sin necesidad de saber su índice.
  58.    Label1.Caption = List1.Text
  59. End Sub
  60.  
En realidad, la búsqueda es sobre si "Contiene...", y quizás sería preferible que la función se limitara a "SiEmpiezaCon...", Tampoco es adecuado que solo con una letra, deba buscarse en el listado, quizás debiera exigirse un mínimo de dos... pero bueno ambas cosas ya debes valorarlo tú.

Para un listivew, depende de lo que quieras hacer... no cambia básicamente nada, (aparte del objeto en sí), o cambia todo, en cualquier caso el control Listview, dispone del método "FindItem", que permite buscar un texto completo o parcial, escribe el nombre del método y pulsa "F1" (Ayuda), lee y mira los ejemplos...

...antes intenta adaptar la solución que te dí al listview, si te satisfe, listo, si no, vuelve a preguntar pero más especificamente con lo que necesitas, ya que ese control es mucho más que un simple Listbox...



p.d.: Olvidaba lo de la tecla enter...

Para probarlo ,escribe 'e' y pulsa sucesivamente la tecla enter, como excepto Méjico ( en la É tildada), tienen una 'e', recorrerá todos losítems y volverá al inicio...
Código
  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2.    If (Len(Text1.Text) > 0) Then
  3.        If KeyAscii = vbKeyReturn Then
  4.            Call BuscarPatron(List1, Text1.Text)
  5.        End If
  6.    End If
  7. End Sub


« Última modificación: 14 Abril 2018, 18:43 pm por NEBIRE » En línea

RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Mover al siguiente elemento igual en un listbox
« Respuesta #2 en: 14 Abril 2018, 19:17 pm »

Gracias, era lo que buscaba, lo unico que a medida q vas escribiendo va saltando entre los resulados hasta que se queda en uno, pero es un detalle. gracias!!

pd: Para mutear el BIP por cada vez que salta a un resultado?  :rolleyes:

Keyascii = 0

Listo perddon :  :xD


Olvidalo, esta perfecto! Me salvaste!
« Última modificación: 14 Abril 2018, 19:35 pm por RiasChan » En línea

RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Mover al siguiente elemento igual en un listbox
« Respuesta #3 en: 14 Abril 2018, 19:44 pm »

Una pregunta... con definir en la funcion as ListView en vez de ListBox, alcanza para que todo esto sea aplicado a un Listview?
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Mover al siguiente elemento igual en un listbox
« Respuesta #4 en: 14 Abril 2018, 21:03 pm »

No.

Listview es mucho más complejo... de entrada sus elementos permanecen en la colección ListItems, luego la cantidad listcount, no es una propiedad al mismo nivel jerárquico... de hecho ni siquiera es una propiedad en listview:
Listbox1.Listcount
Listview1.ListItems.Count
...
Listbox.AddItem ("texto")
Listview1.ListItems.Add (,, "texto")

Hay que adaptarlo y para ello debes conocer en cierta profundidad el control. Si no lo conoces no tiene sentido usarlo, no es conforme usar cosas sin saber que se hace, jugando a 'rpobar a ver que pasa'...

USA la AYUDA, es muy completa, allí se describe a fondo cada control incluyendo el listview, tienes acceso a sus propiedades, métodos, eventos y con ejemplos de cada uno...
En línea

RiasChan

Desconectado Desconectado

Mensajes: 59

RiasChan BNS!


Ver Perfil
Re: Mover al siguiente elemento igual en un listbox
« Respuesta #5 en: 14 Abril 2018, 22:50 pm »

si es un bodrio, lo conzoco, lo uso, el otro dia deje de copiarlo y pegarlo y prendi ver como funciona y mas o menos vi, primero se añaden la columnas desde un while y dsp item a item, desde otro lado. Pero preguntaba si para llamar a una busqueda bastaba con modificar un poco ese codigo, se ve q habra q remodificar todo para un listview, gracias por la ayuda, me re salvaste hace un rato con eso del orden
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines