我得到了一些代码来查找列表框中包含的文本,但这不是我需要的。当用户在文本框(即搜索字段)中输入时,他们必须输入准确的文本,而不是文本的一部分。有没有办法在列表框中找到值/文本的一部分?
例如,我有一个包含这些项目的列表框:
- 数据1
- 数据2
当我在搜索字段(文本框/富文本框)中键入 (2) 时,我希望选择包含“2”值的第二个项目。
我该如何编码?
我得到了一些代码来查找列表框中包含的文本,但这不是我需要的。当用户在文本框(即搜索字段)中输入时,他们必须输入准确的文本,而不是文本的一部分。有没有办法在列表框中找到值/文本的一部分?
例如,我有一个包含这些项目的列表框:
- 数据1
- 数据2
当我在搜索字段(文本框/富文本框)中键入 (2) 时,我希望选择包含“2”值的第二个项目。
我该如何编码?
你可以使用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。
您没有提到是否要在列表框中保留其他项目(与搜索查询不匹配)。
如果您只想将项目保留在匹配或包含您的搜索查询的列表框中,那么您可以在 stackoverflow 上查看此答案。
您必须知道要搜索的字词。例如,文本包含搜索文本中的任何字母,完整的单词,不搜索符号等。您必须“手动”进行,没有搜索相似文本的功能。
例如:
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