Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: ..::Carlos::.. en Marzo 17, 2011, 03:59:15 am
-
hola mi pregunta es como hago para buscar una palabra en un uclistview y cuando la encuentre quede seleccionada
gracias muchas gracias por su colaboracion ;)
-
Cuando puse el ucListView con FilterBar (http://www.leandroascierto.com.ar/foro/index.php?topic=731.0) desarrolle esta rutina para "buscar"
Private Sub ucListView1_FilterTimeout(ByVal Column As Integer)
With ucListView1
' Buscamos en la columna
If .ColumnFilterText(Column) <> "" Then
' m_filter es una variable temporal de lo que alguna vez busco, lo usamos para saber
' si esta buscando el mismo termino (y buscar el siguente item que se asemeje) o
' empezar una nueva busqueda
' En caso de busqueda nueva, empezamos a buscar desde el principio, sino
' a partir desde el ultimo item encontrado
If m_filter <> .ColumnFilterText(Column) Then m_lastSearched = -1
m_filter = .ColumnFilterText(Column)
m_lastSearched = BuscarItem(.ColumnFilterText(Column), Column, m_lastSearched, True, True)
If m_lastSearched >= 0 Then
' En caso de que se haya encontrado, lo seleccionamos, y aseguramos que quede visible
.ItemSelected(m_lastSearched) = True
Call .ItemEnsureVisible(m_lastSearched)
.SetFocus
End If
End If
End With
End Sub
' Funcion que recorre todos los items de la columna "Column" y los compara con sText, Partial define si debe ser exacto (false) o si solo debe tenerlo (true, uso InStr). Warp es, en caso de que se empieze a buscar desde el item 10 (ej) y llegamos al final de la lista, emepzar de nuevo desde el primer item hasta el item 10
Private Function BuscarItem(ByVal sText As String, ByVal Column As Integer, Optional startIndex As Integer = -1, Optional Partial As Boolean = True, Optional ByVal Warp As Boolean = False) As Integer
BuscarItem = -1
Dim i As Integer, res As Integer
With ucListView1
For i = startIndex + 1 To .Count
If Column = 0 Then
If Partial Then
res = InStr(1, .ItemText(i), sText, vbTextCompare)
If res > 0 Then BuscarItem = i: Exit Function
Else
If StrComp(.ItemText(i), sText, vbTextCompare) = 0 Then BuscarItem = i: Exit Function
End If
Else
If Partial Then
res = InStr(1, .SubItemText(i, Column), sText, vbTextCompare)
If res > 0 Then BuscarItem = i: Exit Function
Else
If StrComp(.SubItemText(i, Column), sText, vbTextCompare) = 0 Then BuscarItem = i: Exit Function
End If
End If
Next
If Warp And startIndex > -1 Then
For i = 0 To startIndex
If Column = 0 Then
If Partial Then
res = InStr(1, .ItemText(i), sText, vbTextCompare)
If res > 0 Then BuscarItem = i: Exit Function
Else
If StrComp(.ItemText(i), sText, vbTextCompare) = 0 Then BuscarItem = i: Exit Function
End If
Else
If Partial Then
res = InStr(1, .SubItemText(i, Column), sText, vbTextCompare)
If res > 0 Then BuscarItem = i: Exit Function
Else
If StrComp(.SubItemText(i, Column), sText, vbTextCompare) = 0 Then BuscarItem = i: Exit Function
End If
End If
Next
End If
End With
End Function
Espero que te sirva! Y esta comentado como para ayudarte
-
gracias amigo voy a probarlo y te digo como te va