首页 > 解决方案 > 检查 vb.net 中列表视图中的每一行?

问题描述

我的表单中有一个列表视图,并且列表视图中有很多项目我想检查列表视图中的每一行,如果该行有像 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

我溢出了字符串以将其添加到列表视图中我想删除您看到的第一个示例但第二个示例我想保留它注意线条不整洁提前谢谢

标签: regexvb.netlistview

解决方案


通过在 for...each 中指定该项目的类型为 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条件的,只需 remove()。

@Mary 这是基于我的回答的测试代码。向表单和一个按钮添加一个包含 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 接口的实现方式有关。我正在尝试查找该文章,但它与影响本地副本而不是实际集合有关。

但是,在阅读完此内容后,我会说,最好坚持使用反向 for...循环,因为大多数人在更改集合大小时都会失败。


推荐阅读