在列表框中查找文本的一部分

时间:2013-01-11 09:37:47

标签: vb.net

我已经获得了一些代码来查找列表框中包含的文本但是,它不是我需要的。当用户键入文本框(即搜索字段)时,他们必须键入确切的文本,而不是文本的一部分。有没有办法在列表框中找到值/文本的一部分?

例如,我有一个包含这些项目的列表框:

  
      
  1. DATA1
  2.   
  3. DATA2
  4.   

当我在搜索字段(textbox / richtextbox)中输入(2)时,我希望选择包含“2”值的第二项。

我该如何编码?

3 个答案:

答案 0 :(得分:1)

您可以使用IndexOf

Dim hits = From item In listBox1.Items.Cast(Of String)()
           Where item.IndexOf(txtSearch.Text, StringComparison.OrdinalIgnoreCase) >= 0
If hits.Any Then
    listBox1.SelectedItem = hits.First()
End If

如果您不想忽略此案例,请使用String.Contains代替String.IndexOf

请注意,上面是一个linq查询,所以它不能以这种方式与.NET 2一起使用。

答案 1 :(得分:0)

您必须知道搜索所需的字词。例如,包含搜索文本中的任何字母的文本,完整的单词,不搜索符号等。 你必须“手动”执行,没有搜索类似文本的功能。

例如:

Private Sub SearchBox_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles SearchBox.TextChanged
    Dim iFound As Integer = -1

    For i As Integer = 0 To SearchBox.TextLength - 1
        If TextBox1.Text.Contains(SearchBox.Text(i)) Then
            iFound = TextBox1.Text.IndexOf(SearchBox.Text(i))
            Exit For
        End If
    Next

    If iFound >= 0 Then
        TextBox1.Select(iFound, 1)
    End If
End Sub

答案 2 :(得分:0)

您没有提及要在列表框中保留其他项目(与搜索查询不匹配)。

如果您只想保留列表框中与搜索查询匹配或包含搜索查询的项目,则可以在stackoverflow上查看此答案。

Match starting of a string in listbox OR Match some part of a string in listbox items