我只是想知道是否可以从列表视图中删除一个项目,只需知道它的文本名称(如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
谢谢!
大卫
答案 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