使用vb.net中的if语句过滤ListViewItems

时间:2018-03-14 06:56:53

标签: vb.net listview listviewitem

我正在尝试使用“搜索”TextBoxButton创建一个简单的过滤器,它只是根据用户输入过滤ListView中的项目。

我使用以下代码使其工作:

If (item.SubItems(1).Text.Contains(txtSearch1.Text.ToLower) = False AndAlso
    item.SubItems(1).Text.Contains(txtSearch1.Text.ToUpper) = False) Then

    ListViewItems.Items.Remove(item)
End If

代码检查ListViewItem是否包含用户正在搜索的字符串,如果不包含,则删除项目,只留下与搜索字符串匹配的项目。

问题是,当搜索字符串与ListViewItem完全匹配时,该项目仍会被删除。

例如:有两项:Item1Item2
如果用户搜索“1”,item2将从列表中删除。 但是,如果用户搜索“item1”,则会删除这两个项目。

我如何让它发挥作用?

2 个答案:

答案 0 :(得分:0)

由于您的AndAlso操作,完全匹配将被删除。它不会与文本的ToLower和' ToUpper副本相匹配,因此您的情况永远不会成功。您可以将条件更改为OrElse,以便在其中任何一个为真时返回true。

<强>更新

使用您给出的示例进一步解释,通过搜索1,表现出正确的行为,因为&#34; 1&#34;没有大小写,因此在搜索字符串的大写和小写副本中都是相同的。但是,当包含字母字符时,搜索将失败,因为没有字符串将匹配&#34; item2&#34;和#34; ITEM2&#34;除非您使用Option Compare Text

答案 1 :(得分:0)

我发现(或刚刚开发)解决方案。 我只使用了一个条件:

 If item.SubItems(1).Text.ToUpper.Contains(txtSearch1.Text.ToUpper) = False Then
    ListViewItems.Items.Remove(item)
End If

问题是因为输入和listviewitem文本的情况,将它们都转换为大写解决了问题。 谢谢!