Question

I am trying to create a Loop that will read through the information on my ListView through the SubItem to find the text that matches the text in my Textbox whenever I hit the search button and Focuses the listbox onto the matched text. Below is what I have but it keeps telling me that the value of string cannot be converted. I am also pretty sure that my numbers wont loop correctly but I am not really sure how to cause them to loop endlessly till end of statement.

    Dim T As String
    T = Lines.Text
    For r As Integer = 0 to -1
        For C As Integer = 0 to -1
            If List.Items(r).SubItems(C).Text = Lines.Text Then
                List.FocusedItem = T
            End If
        Next
    Next

End Sub
Était-ce utile?

La solution 2

Instead of looping like that through the ListView, try using a For Each instead:

searchstring as String = "test1b"
ListView1.SelectedIndices.Clear()
For Each lvi As ListViewItem In ListView1.Items
    For Each lvisub As ListViewItem.ListViewSubItem In lvi.SubItems
        If lvisub.Text = searchstring Then
            ListView1.SelectedIndices.Add(lvi.Index)
            Exit For
        End If
    Next
Next
ListView1.Focus()

This will select every item which has a text match in a subitem. Don't put this code in a form load handler, it won't give the focus to the listview and the selected items won't show. Use a Button click handler instead.

Autres conseils

I don't understand your code, but I do understand the question. Below is example code to search all rows and columns of a listview. Search is case insensitive and supports a "find next match" scenario. If a match or partial match is found in any column the row is selected. TextBox1 gets the text to find. FindBtn starts a new search.

Private SrchParameter As String = ""
Private NxtStrtRow As Integer = 0

Private Sub FindBtn_Click(sender As Object, e As EventArgs) Handles FindBtn.Click
    If Not String.IsNullOrWhiteSpace(TextBox1.Text) Then
        SrchParameter = TextBox1.Text
        NxtStrtRow = 0
        SearchListView()
    End If
End Sub

Private Sub ListView1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListView1.KeyDown
    If e.KeyCode = Keys.F3 Then
        SearchListView()
    End If
End Sub

Private Sub SearchListView()
    ' selects the row containing data matching the text parameter
    ' sets NxtStrtRow (a form level variable) value for a "find next match" scenario (press F3 key)
    If ListView1.Items.Count > 0 Then
        If SrchParameter <> "" Then
            Dim thisRow As Integer = -1
            For x As Integer = NxtStrtRow To ListView1.Items.Count - 1          ' each row
                For y As Integer = 0 To ListView1.Columns.Count - 1             ' each column  
                    If InStr(1, ListView1.Items(x).SubItems(y).Text.ToLower, SrchParameter.ToLower) > 0 Then
                        thisRow = x
                        NxtStrtRow = x + 1
                        Exit For
                    End If
                Next
                If thisRow > -1 Then Exit For
            Next
            If thisRow = -1 Then
                MsgBox("Not found.")
                NxtStrtRow = 0
                TextBox1.SelectAll()
                TextBox1.Select()
            Else
                ' select the row, ensure its visible and set focus into the listview
                ListView1.Items(thisRow).Selected = True
                ListView1.Items(thisRow).EnsureVisible()
                ListView1.Select()
            End If
        End If
    End If
End Sub

This is the easiest way to search in listview and combobox controls in vb net

dim i as integer = cb_name.findstring(tb_name.text) 'findstring will return index

if i = -1 then
msgbox("Not found")
else
msgbox("Item found")
end if
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top