在 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