2013-07-17 120 views
0

我正在使用vb.net中的列表框,并试图从列表框中删除所有不包含特定文本的项目一个按钮。这里是我的代码:vb.net listbox-删除所有不包含特定文本的项目

Dim i As Integer 
    For i = 0 To ListBoxPrePublish.Items.Count - 1 
     If InStr(ListBoxPrePublish.Items(i), "-8-") > 0 = False Then 
      ListBoxPrePublish.Items.RemoveAt(i) 
      Exit For 
     End If 
    Next 

虽然这一次只能删除1个项目。我怎样才能调整这个删除所有不包含“-8-”的项目?

编辑:如果有人问,列表框项目列表越来越大,所以我添加了一个排序功能,以便用户如果愿意可以缩小它们的选项。这就是为什么我没有过滤任何东西之前添加到列表框

+0

尝试在不同方向'对于i = ListBoxPrePublish.Items.Count循环 - 1向0步骤-1' –

+0

谢谢但“预计声明的结尾”,当我添加到0步骤-1 –

+0

你能发布完整的代码后向循环代码修改吗? '步骤-1'是一个有效的VB.Net语句。另外在VB中'String'有'Contains'方法,所以你可以将你的检查做为'If ListBoxPrePublish.Items(i).Contains(“ - 8-”)Then' –

回答

1

下面是我在评论中提到向后循环的完整代码 - 它应该工作:

For i as Integer = ListBoxPrePublish.Items.Count - 1 To 0 Step -1 
    If Not ListBoxPrePublish.Items(i).Contains("-8-") Then 
     ListBoxPrePublish.Items.RemoveAt(i) 
    End If 
Next 
+0

谢谢,我明白我的错误在哪里。不幸的是,这产生了与我最初的代码相同的结果。仍然只删除每个按钮点击1个项目。 –

+1

你确定吗?你的初始代码甚至有“退出”,只保证一次删除。你可以在调试器中通过这段代码来查看条件是否被满足,并且如果正在移除? –

+0

对不起尤里,你是对的。为了不复制/粘贴代码,我忽略了你从代码示例中删除了代码。感谢您的帮助,我非常感谢。这已解决! –

1

不,我不知道任何RemoveRange类型的功能。并且请注意,您需要在删除项目时向后循环显示列表框Items,否则将得到索引异常,因为一旦删除了某些内容,就会混淆迭代器中所有剩余项目的索引值。

+0

嗯,谢谢你的指针。我发现令人困惑的是我可以使用For Each循环删除所有选定的项目,我认为是我可以做到这一点,我应该以某种方式能够完成我后 –

相关问题