ListView使用VB.net按名称删除项目

时间:2011-03-16 17:37:19

标签: vb.net visual-studio-2010 listview

我只是想知道是否可以从列表视图中删除一个项目,只需知道它的文本名称(如listbox.text),而无需知道索引或选择/突出显示它?

 Dim lvi As ListViewItem
 Dim lvi2 As ListViewItem

    For Each lvi In lstMaster.Items
        For Each lvi2 In lstNew.Items
            If lvi.Text = lvi2.text Then
                'Remove the item using its TEXT..
                'Eample:
                'lstMaster        | lstNew
                '--------------------------------------
                'Bob              | Jenny
                'Jason            |
                'Jenny            |
                'Zac              |
                '--------------------------------------
                'The program should delete "Jenny" from the lstMaster....
            End If
        Next
    Next

谢谢!

大卫

3 个答案:

答案 0 :(得分:1)

此代码适用于您:

Dim lvw As New ListView()

lvw.Items.AddRange({New ListViewItem("Item 1"),
                    New ListViewItem("Item 2"),
                    New ListViewItem("Item 3")})

lvw.Items.Remove((From i In lvw.Items.OfType(Of ListViewItem)() 
                  Where i.Text = "Item 1").First)

它使用LINQ查找带有文本“Item 1”的项目,然后将其从ListView的ListViewItemCollection(Items属性)中删除。

这里的一个小警告是必须有一个带有文本“Item 1”的Item,否则First()扩展方法将失败。如果您不确定,可以使用FirstOrDefault()或预先检查LINQ语句是否包含值,然后再继续删除项目。

修改

这是符合您更新要求的更新代码:

For Each lvi in lstNew.Items
    Dim masterItem = From i in lstMaster.Items.OfType(Of ListViewItem)()
                     Where i.Text = lvi.Text

    If masterItem.Any Then
        lstMaster.Items.Remove(masterItem.First)
    End If
Next

答案 1 :(得分:1)

您只需复制要删除项目的列表,如下所示:

For Each lvi In lstMaster.Items.ToList
    For Each lvi2 In lstNew.Items
        If lvi.Text = lvi2.text Then
            lstMaster.Items.Remove(lvi)
        End If
    Next
Next

这样您就不会有从当前列举的列表中删除项目的问题。

答案 2 :(得分:1)

我不明白为什么你不能使用text属性。你有什么理由不能这样做:

If lvi.Text = lvi2.Text Then
    lstMaster.Items.Remove(lvi)
End If