【问题标题】:vb.net listbox- Remove ALL items that DON'T contain specific textvb.net listbox-删除所有不包含特定文本的项目
【发布时间】:2013-07-17 19:50:49
【问题描述】:

我正在使用 vb.net 中的列表框,并尝试通过单击按钮从列表框中删除不包含特定文本的所有项目。这是我的代码:

   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-”的项目?

编辑:万一有人问,列表框项目列表变得相当大,所以我添加了一个排序功能,这样用户可以根据需要调整他们的选项。这就是为什么我在添加到列表框之前不过滤任何内容

【问题讨论】:

  • 尝试在不同方向循环For i = ListBoxPrePublish.Items.Count - 1 To 0 Step -1
  • 谢谢,但是当我添加到 0 Step -1 时“预期语句结束”
  • 你能发布整个代码修改后的代码代码吗? 'Step -1' 是一个有效的 VB.Net 语句。 VB 中的String 也有Contains 方法,因此您可以使用If ListBoxPrePublish.Items(i).Contains("-8-") Then 进行检查

标签: vb.net listbox


【解决方案1】:

这是我在 cmets 中提到的反向循环的完整代码 - 它应该可以工作:

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

【讨论】:

  • 谢谢,我知道我的错误在哪里了。不幸的是,这会产生与我的初始代码相同的结果。每次按钮点击仍然只删除 1 个项目。
  • 你确定吗?您的初始代码甚至有“退出”,它保证只删除一次。您可以在调试器中单步执行此代码以查看是否满足条件以及是否正在删除?
  • 对不起,Yuriy,你是对的。为了不复制/粘贴代码,我忽略了您已将其从代码示例中删除。感谢您的帮助,我非常感谢。已解决!
【解决方案2】:

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

【讨论】:

  • 嗯,谢谢指点。我发现令人困惑的是我可以使用 For Each 循环删除所有选定的项目,我认为我可以做到这一点,我应该能够以某种方式完成我所追求的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 2018-03-17
相关资源
最近更新 更多