Regex 在vb.net中检查listview中的每一行?
我的表单中有一个列表视图,列表视图中有很多项,我想检查列表视图中的每一行是否有一个特殊的字符串,如 127.0.0.1该行将被删除我尝试过这样做,这是我的代码Regex 在vb.net中检查listview中的每一行?,regex,vb.net,listview,Regex,Vb.net,Listview,我的表单中有一个列表视图,列表视图中有很多项,我想检查列表视图中的每一行是否有一个特殊的字符串,如 127.0.0.1该行将被删除我尝试过这样做,这是我的代码 Dim was As Integer For Each item In ListView1.Items was = ListView1.Items.Count - 1 ListView1.SelectedIndices.Add(was) ListView1.Focus()
Dim was As Integer
For Each item In ListView1.Items
was = ListView1.Items.Count - 1
ListView1.SelectedIndices.Add(was)
ListView1.Focus()
If ListView1.SelectedItems(0).SubItems(2).Text().Contains("127.0.0.1") Then
Dim a As ListViewItem
a = ListView1.SelectedItems(0)
a.Remove()
End If
Next
这是listview中一行的示例
first examble :TCP#127.0.0.1:5939#127.0.0.1:54741#ESTABLISHED#3620
second example :TCP#192.168.1.5:3488#52.230.84.0:443#ESTABLISHED#3732
我将字符串拆分以将其添加到listview
我想删除您看到的第一个示例,但第二个示例我想保留它
当心线路不整洁
提前感谢通过在for…中指定项目类型为ListViewItem,您可以从项目中公开属性
For Each item As ListViewItem In ListView1.Items
If item.SubItems(2).Text.Contains("127.0.0.1") Then
item.Remove()
End If
Next
找到符合If
标准的项后,只需删除()
@玛丽
下面是基于我的答案的测试代码。在表单和按钮中添加一个包含3列的listview
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim lv As New ListViewItem
lv.Text = "able"
lv.SubItems.Add("baker")
lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
ListView1.Items.Add(lv)
lv = New ListViewItem
lv.Text = "able"
lv.SubItems.Add("baker")
lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
ListView1.Items.Add(lv)
lv = New ListViewItem
lv.Text = "able"
lv.SubItems.Add("baker")
lv.SubItems.Add(":TCP#127.0.4.1:5939#127.0.4.1:54741#ESTABLISHED#3620")
ListView1.Items.Add(lv)
lv = New ListViewItem
lv.Text = "able"
lv.SubItems.Add("baker")
lv.SubItems.Add(":TCP#127.0.0.1# ESTABLISHED3620")
ListView1.Items.Add(lv)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each itm As ListViewItem In ListView1.Items
If itm.SubItems(2).Text.Contains("127.0.0.1") Then
itm.Remove()
End If
Next
End Sub
其工作原理与IEnumerable接口的实现方式有关。我试图找到这篇文章,但这与影响本地副本有关,而不是实际的收藏
但是,在阅读了本文之后,我会说,最好还是坚持使用相反的for…循环,因为大多数循环在更改集合大小时都会失败。如果要删除集合中的项,则不能使用for Each进行迭代。在循环之前获取计数,因为计数将随着循环的运行而更改。减去1,因为索引是从零开始的。向后迭代,因为如果向前迭代,则删除项时索引会发生更改,并且将跳过项,最终索引将超出范围
Private Sub IterateListView()
Dim count As Integer = ListView1.Items.Count - 1
For index = count To 0 Step -1
If ListView1.Items(index).SubItems(2).Text.Contains("127.0.0.1") Then
ListView1.Items(index).Remove()
End If
Next
End Sub
当您将字符串添加到列表视图时,它是如何分割的.SubItems(2)
将查看列表视图中的第三列。SelectedItems
将仅返回当前选定的项目,而不是列表中的所有项目。也许你应该试试.Items
集合为什么不使用item如果item.SubItems(2).Text.包含(“127.0.0.1”),则item.remove结束If
但是,您可能需要将每个项作为Listview1.Items中的listviewitem执行,以确保它被视为listviewitem。这应该只有5行代码,包括for-each和next-line。在for-each中迭代项目时,不能弄乱它们。使用一个用于。。。Next@Mary,我加了一个例子。我发现这适用于Listview和dataGridView,并且有一种方法可以实际使用包含字符串或对象的listbox。老兄,你是alegend,非常感谢你,它的工作非常好,你让我很高兴。^-^@Charles祝你说得对。我在这方面做了一点傻事,我得到了一个简单的列表(T)系统所期望的错误。InvalidOperationException:'集合被修改;枚举操作可能无法执行。但是ListViewItemsCollection必须是不同类型的动物。谢谢你的提醒。