在 vb.net 中使用文本框过滤列表框
Filter listbox with textbox in vb.net
我有一个列表框,其中已经添加了很多名称,现在我想尝试做一个简单的过滤器(大写或小写无关紧要,我的意思是如果用户将在文本框上写"apple",列表框总是显示它的结果)用于查找写在文本框上的带有列表框名称的字符串。
我已经用这种方式尝试了 cycle for,(检查所有索引),但我不知道如何检查 if:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
For counter As Integer = 0 To ListBox1.Items.Count - 1
If InStr(ListBox1.Items(counter).ToString, TextBox1.Text) Then
End If
Next
End Sub
如果要搜索子字符串,请使用 String.IndexOf
等 .NET 方法:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
For counter As Integer = 0 To ListBox1.Items.Count - 1
Dim item = ListBox1.Items(counter).ToString()
Dim containsText = item.IndexOf(TextBox1.Text, StringComparison.CurrentCultureIgnoreCase) >= 0
If containsText Then
End If
Next
End Sub
如果您想过滤此列表框,您可以使用以下 LINQ 查询:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim items = From it In ListBox1.Items.Cast(Of Object)()
Where it.ToString().IndexOf(TextBox1.Text, StringComparison.CurrentCultureIgnoreCase) >= 0
Dim matchingItemList As List(Of Object) = items.ToList()
ListBox1.BeginUpdate()
ListBox1.Items.Clear()
For Each item In matchingItemList
ListBox1.Items.Add(item)
Next
ListBox1.EndUpdate()
End Sub
这是c# question的副本,这是翻译后的代码。
Public Sub t1_TextChanged(sender As Object, e As TextChangedEventArgs)
If [String].IsNullOrEmpty(t1.Text.Trim()) = False Then
lb1.Items.Clear()
For Each str As String In list
If str.StartsWith(t1.Text.Trim()) Then
lb1.Items.Add(str)
End If
Next
ElseIf t1.Text.Trim() = "" Then
lb1.Items.Clear()
For Each str As String In list
lb1.Items.Add(str)
Next
End If
End Sub
我有一个列表框,其中已经添加了很多名称,现在我想尝试做一个简单的过滤器(大写或小写无关紧要,我的意思是如果用户将在文本框上写"apple",列表框总是显示它的结果)用于查找写在文本框上的带有列表框名称的字符串。 我已经用这种方式尝试了 cycle for,(检查所有索引),但我不知道如何检查 if:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
For counter As Integer = 0 To ListBox1.Items.Count - 1
If InStr(ListBox1.Items(counter).ToString, TextBox1.Text) Then
End If
Next
End Sub
如果要搜索子字符串,请使用 String.IndexOf
等 .NET 方法:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
For counter As Integer = 0 To ListBox1.Items.Count - 1
Dim item = ListBox1.Items(counter).ToString()
Dim containsText = item.IndexOf(TextBox1.Text, StringComparison.CurrentCultureIgnoreCase) >= 0
If containsText Then
End If
Next
End Sub
如果您想过滤此列表框,您可以使用以下 LINQ 查询:
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim items = From it In ListBox1.Items.Cast(Of Object)()
Where it.ToString().IndexOf(TextBox1.Text, StringComparison.CurrentCultureIgnoreCase) >= 0
Dim matchingItemList As List(Of Object) = items.ToList()
ListBox1.BeginUpdate()
ListBox1.Items.Clear()
For Each item In matchingItemList
ListBox1.Items.Add(item)
Next
ListBox1.EndUpdate()
End Sub
这是c# question的副本,这是翻译后的代码。
Public Sub t1_TextChanged(sender As Object, e As TextChangedEventArgs)
If [String].IsNullOrEmpty(t1.Text.Trim()) = False Then
lb1.Items.Clear()
For Each str As String In list
If str.StartsWith(t1.Text.Trim()) Then
lb1.Items.Add(str)
End If
Next
ElseIf t1.Text.Trim() = "" Then
lb1.Items.Clear()
For Each str As String In list
lb1.Items.Add(str)
Next
End If
End Sub