ListView удалить элемент по имени, используя VB.net - PullRequest
0 голосов
/ 16 марта 2011

Мне было просто интересно, можно ли удалить элемент из списка, просто зная его текстовое имя (как в 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

Спасибо! * * 1004

David

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Вы можете просто скопировать список, из которого вы хотите удалить элементы, например:

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

Таким образом, у вас не будет проблемы с удалением элементов из списка, который вы сейчас перечисляете.

1 голос
/ 16 марта 2011

Я не понимаю, почему вы не можете использовать свойство text.Есть ли причина, почему вы не можете сделать это, хотя:

If lvi.Text = lvi2.Text Then
    lstMaster.Items.Remove(lvi)
End If
1 голос
/ 16 марта 2011

Этот код должен работать для вас:

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», а затем удаляет его из ListViewItemCollection ListView (свойство Items).

Небольшое предостережение здесь заключается в том, что должен существовать Item с текстом «Item 1», иначе метод расширения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...