Busqueda parcial en Listview

Necesito realizar una busqueda en un listview, pero quiero que sea una busqueda parcial para que no necesariamente tecleen todo el nombre para que lo pueda encontrar, mira este es mi codigo y funciona pero solo si capturan el nombre completo.
Private Sub SearchAndSelect()
Dim tItem As ListItem
Dim lvwFind As ListFindItemHowConstants
Dim lvwWhere As ListFindItemWhereConstants
Dim i As Long
Dim s As String
lvwFind = lvwPartial
lvwWhere = lvwSubItem
If Me.ListView.ListItems.Count = 0 Then
    MsgBox "Element not found!", vbInformation + vbOKOnly, App.Title
    Exit Sub
Else
    Set tItem = ListView.FindItem(txtSearchItem.Text, 1, 1, lvwPartial)
    If Not tItem Is Nothing Then
        tItem.Checked = True
        tItem.Selected = True
        tItem.EnsureVisible
    Else
        MsgBox "Element not found!", vbInformation + vbOKOnly, App.Title
    End If
End If
End Sub

1 respuesta

Respuesta
1
Lo que sucede es que FindItem, solo hace busquedas completas de lo que escriben
Se me ocurre que en un for recorras el listview y hagas un InStr para buscar lo que necesitas.
Muchas gracias y disculpa la tardanza para finalizar esta pregunta. Lo que sugeriste fue precisamente lo que hice, anexo codigo para futuras consultas sobre lo mismo....
Este pedacito de codigo va en el KeyPress del text...
Dim ret As Long
ret = Buscar(ListView, txtSearchItem, CInt(1), Abs(0))
If ret 0 Then
ListView.ListItems(ret).Selected = True
ListView.ListItems(ret).Checked = True
ListView.ListItems(ret).EnsureVisible
ListView.SetFocus
Else
MsgBox "Element not found!", vbInformation + vbOKOnly, App.Title
End If
Y este es el codigo de la funcion...
Function Buscar(Lv As ListView, _
Cadena As String, _
nCol As Integer, _
bFraseCompleta As Boolean) As Long
Dim i As Long
Dim iStart As Long
Dim oItem As ListItem
'If Lv.SelectedItem Is Nothing Then
' i = 1
If Not Lv.SelectedItem Is Nothing Then
iStart = Lv.SelectedItem.Index + 1
Else
iStart = 1
End If
With Lv
For i = iStart To Lv.ListItems.Count
Set oItem = Lv.ListItems(i)
Dim sItem As String
If nCol = 0 Then
sItem = Lv.ListItems(i)
Else
sItem = oItem.SubItems(nCol)
End If
If bFraseCompleta = False Then
Dim nPos As Integer
nPos = InStr(LCase(sItem), LCase(Cadena))
If nPos 0 Then
Buscar = oItem.Index
oItem.EnsureVisible
Exit For
End If
ElseIf bFraseCompleta = True Then
If LCase(sItem) = LCase(Cadena) Then
Buscar = oItem.Index
oItem.EnsureVisible
Exit For
End If
End If
Next
End With
Set Lv.SelectedItem = Nothing
End Function
Gracias y saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas