我在表单中有一个列表视图,并且列表视图中有很多项,我想检查列表视图中的每一行是否有特殊字符串,例如 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()
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
这是列表视图中一行的示例
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
我把字符串撒了出来,将其添加到列表视图中 我想删除您看到的第一个示例,但我想保留第二个示例 小心线不整齐 预先感谢
答案 0 :(得分:2)
通过在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
一旦找到符合item
条件的If
,只需删除()。
@玛丽 这是基于我的答案的测试代码。在表单中添加3列列表视图和一个按钮
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接口的实现方式有关。我正在尝试查找该文章,但这与影响本地副本而不是实际集合有关。
不过,我会在读完此书后说,最好是对...进行循环,因为大多数在更改集合大小时都会失败。
答案 1 :(得分:1)
如果要删除集合中的项目,则不能使用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