Nuevo Foro de programacion
0 Usuarios y 1 Visitante están viendo este tema.
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 WithEnd 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 10Private 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 WithEnd Function