Recorrer listview al buscar y que seleccione la siguiente coincidencia

Iniciado por RiasChan, 19 Abril 2018, 18:18 PM

0 Miembros y 1 Visitante están viendo este tema.

RiasChan

Tengo este codigo, que me vale bien para buscar por columna, y seleccionar la coincidencia:

Private Sub cmdBuscar_Click()
  Dim Opcion As Integer
  Dim dato As String
  Dim Item As ListItem
 
  ' busca por las demás columnas ( por SubItem )
  If Option1.Value = True Then
     dato = txtSearch.Text
     Opcion = lvwSubItem ' busca por los subitems
  End If

  Next i
        ' Busca por la primer columna ( por item )
  If Option2.Value = True Then
     dato = txtSearch.Text
     Opcion = lvwText ' busca por el item
  End If
     
   ' si lo ingresado es una cadena vacia sale
   If dato = vbNullString Then
       Exit Sub
   End If
 
  ' Busca con el método FindItem, estableciendo la opcion de búsqueda
  Set Item = ListView1.FindItem(dato, Opcion, , lvwPartial)
   
  ' si el item es nothing no se encontró
  If Item Is Nothing Then
     MsgBox " No se encontró el dato", vbInformation
     Exit Sub
  Else
      ' .. si no , selecciona el elemento encontrado
      Item.EnsureVisible
      Item.Selected = True
      ListView1.SetFocus
  End If

              End Sub


le faltaría agregarle un ciclo para que continue con la palabra siguiente al volver a aprtar el boton. Alguna idea?

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

RiasChan


RiasChan

sintetizé todos mis problemas en un post modificado mas rapido. La petición es directa y sin vueltas, gracias  :laugh:

Serapis

Los mensajes privados, son razonablemente para cosas en las que nadie más tenga ver o saber lo que uno tenga que decir a otro, no para solicitar ayuda...

Cita de: RiasChan en 21 Abril 2018, 21:13 PM
Holal, me acuerdo de vos, fuiste muy amable al darme un codigo exelente para buscar en un list.

Lo que me pasa ahora es q tengo un listview, (ya cargado todo) La idea es buscar por columnas y que el foco se pare en esa fila (ya esta hecho) Lo que me faltaria es que cada vez q hago click en el commandbuton vuelva a buscar y marque el siguiente, o sea, el ciclo. Tenes idea?

este es el código del boton:



Dim k As Long
   Dim Opcion As Integer
   Dim dato As String
   Dim Item As ListItem

      ' Busca por la primer columna ( por item )
   If Option2.Value = True Then
      dato = txtSearch.Text
      Opcion = lvwText ' busca por el item
   End If
     
   ' busca por las demás columnas ( por SubItem )
   If Option1.Value = True Then
      dato = txtSearch.Text
      Opcion = lvwSubItem ' busca por los subitems
   End If
     
    ' si lo ingresado es una cadena vacia sale
    If dato = vbNullString Then
        Exit Sub
    End If
 
   ' Busca con el método FindItem, estableciendo la opcion de búsqueda
   Set Item = ListView1.FindItem(dato, Opcion, , lvwPartial)
     
   ' si el item es nothing no se encontró
   If Item Is Nothing Then
      MsgBox " No se encontró el dato", vbInformation
      Exit Sub
   Else
       ' .. si no , selecciona el elemento encontrado
       Item.EnsureVisible
       Item.Selected = True
       ListView1.SetFocus
   End If
   


El problema es que ma pereza tener que armar todo un proyecto sólo para verificar una tontería y que luego no se ajuste a tus necesidades. Ya te dije que un listview es un control complejo y muy completo. en realidad si uno conoce con cierta soltura vb6, el código que te dí para el control listbox, debiera ser suficiente para saber aplicalro a otro control que también disponga de una lista... solo cambian nombres de propiedades, de objetos, y la forma de llagar a ellas...

Por otro lado, si me pasas copia del proyecto (basta con la ventana donde tengas el listview (con la configuración que tengas para el propio control), y el código de respuesta... veo de cargarlo, ejecutarlo y donde está el fallo, error, etc... entonces no es tanto tiempo de mi parte.
(es decir, no necesito chorrocientos formularios, ni módulos de tú proyecto, sólo lo preciso para probarlo con la configuración que mantienes y otros controles que tengas asociados al listview incluso si haces copia del mismo, luego en la copia elimina todo lo superfluo para probarlo (esto es, si tienes un textbox, un label, un botón, etc... que interrelacionan con el listview, se quedan pero si no, sobra solo me hará perder tiempo, de igual modo elimina todo el código no relacionado, esto es si en la carga del formulario hay líneas relacionadas con el listview, se quedan, etc...). Cuando lo que se pide no es puntual, o no se es explícito, da pereza porque conlleva mucho más tiempo y sin la certeza de que sea lo que uno realmente necesita.

Saludos...

RiasChan

Hola, todo bien no pasa nada. De casualidad encontre este ejemplo 97 (ejemplo 2) que hace justo lo que quiero, ya esta solucionado dsp de buscar un rato (por que encontre eso de casualidad bajando desde el ejemplo 192 de recursos vb. salu2

http://www.recursosvisualbasic.com.ar/htm/listado-api/97-buscar-en-listview.htm