检查vb.net中listview中的每一行?

时间:2018-06-27 21:10:52

标签: 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()
        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

我把字符串撒了出来,将其添加到列表视图中 我想删除您看到的第一个示例,但我想保留第二个示例 小心线不整齐 预先感谢

2 个答案:

答案 0 :(得分:2)

通过在f​​or中指定该项目的类型为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