VB.NET ListView问题

时间:2012-01-16 07:32:37

标签: vb.net winforms

我有疑问? 如果我在文本框中输入数据, 我希望我的listview选择在文本框中输入的相同数据

例如, 我的listview中有一个StudentNumber列,上面有数据(例如123456) 我将在文本框中输入123456。 ListView必须选择123456? 请帮忙

谢谢,

1 个答案:

答案 0 :(得分:2)

我认为这会做你想要的。它将在ListView的第一个列中搜索TextBox中的文本。

设置列表视图:

With ListView1
    .MultiSelect = False 'Ensure only one item selected at a time
    .HideSelection = False 'Shows the selection when the textbox changes
    'Add some items for testing
    .Items.Add("1234")
    .Items.Add("1122")
    .Items.Add("1133")
End With

然后在文本框中TextChanged更改了事件:

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    ListView1.SelectedItems.Clear()
    Dim foundItem As ListViewItem = ListView1.FindItemWithText(TextBox1.Text, False, 0, False)
    If (foundItem IsNot Nothing) Then foundItem.Selected = True
End Sub

或者,如果您想指定ListView的哪个列来搜索文本,那么此函数应该可以解决这个问题:

Private Sub SelectListViewItem(ByRef listviewSource As ListView, ByVal textToFind As String, ByVal column As Integer)
    Dim foundItem As ListViewItem = Nothing
    Dim startIndex As Integer = 0

    listviewSource.SelectedItems.Clear()

    Do Until Not foundItem Is Nothing AndAlso foundItem.SubItems(column).Text = TextBox2.Text
        If foundItem Is Nothing Then startIndex = 0 Else startIndex = foundItem.Index + 1
        If startIndex > listviewSource.Items.Count - 1 Then Exit Sub 'We have reached end of the listview
        foundItem = listviewSource.FindItemWithText(textToFind, True, startIndex)
        If foundItem Is Nothing Then Exit Sub
    Loop

    If (foundItem IsNot Nothing) Then foundItem.Selected = True
End Sub

用法:

Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged

    SelectListViewItem(ListView1, TextBox2.Text, 1)
End Sub

警告 - 在这两种情况下,如果您的列表视图中包含大量项目,这可能会导致您的应用程序执行效果不佳,在这种情况下,您可以考虑将代码移动到后台工作程序中