Есть ли событие, которое срабатывает, если количество ListViewItems в ListView изменяется? (Windows Forms) - PullRequest
3 голосов
/ 06 сентября 2008

Я бы хотел включить / отключить некоторые другие элементы управления в зависимости от количества элементов в моем ListView элементе управления. Я не могу найти ни одного события, которое бы это делало, ни на ListView, ни на ListViewItemCollection. Может быть, есть какой-нибудь способ просмотреть любую коллекцию в C # на предмет изменений?

Я был бы рад и другим событиям, даже тем, которые иногда запускаются, когда элементы не меняются, но, например, события ControlAdded и Layout не работают: (.

Ответы [ 3 ]

2 голосов
/ 06 сентября 2008

@ Доменик

Не слишком уверен, Никогда не зашел так далеко в мыслительном процессе.

Другое решение может заключаться в расширении ListView, и при добавлении и удалении вещи вместо вызова .items.add и items.remove вы вызываете ваши другие функции. Было бы все еще возможно добавить и удалить без событий, но с небольшим обзором кода, чтобы удостовериться, что .items.add и .items.remove не были вызваны непосредственно, это могло бы работать довольно хорошо Вот маленький пример. Я показал только 1 функцию добавления, но есть 6, которые вам нужно реализовать, если вы хотите использовать все доступные функции добавления. Также есть .AddRange и .Clear, на которые вы, возможно, захотите взглянуть.

Public Class MonitoredListView
    Inherits ListView

    Public Event ItemAdded()
    Public Event ItemRemoved()

    Public Sub New()
        MyBase.New()
    End Sub

    Public Function AddItem(ByVal Text As String) As ListViewItem
        RaiseEvent ItemAdded()

        MyBase.Items.Add(Text)
    End Function

    Public Sub RemoveItem(ByVal Item As ListViewItem)
        RaiseEvent ItemRemoved()

        MyBase.Items.Remove(Item)
    End Sub

End Class
0 голосов
/ 06 сентября 2008

Я думаю, что лучшее, что вы можете здесь сделать, это создать подкласс ListView и предоставить нужные вам события.

0 голосов
/ 06 сентября 2008

Я не могу найти события, которые вы могли бы использовать. Возможно, вы могли бы создать подкласс ListViewItemCollection и вызывать собственное событие при добавлении чего-либо с кодом, подобным этому.

Public Class MyListViewItemCollection
    Inherits ListView.ListViewItemCollection

    Public Event ItemAdded(ByVal Item As ListViewItem)

    Sub New(ByVal owner As ListView)
        MyBase.New(owner)
    End Sub

    Public Overrides Function Add(ByVal value As System.Windows.Forms.ListViewItem) As System.Windows.Forms.ListViewItem
        Dim Item As ListViewItem

        Item = MyBase.Add(value)

        RaiseEvent ItemAdded(Item)

        Return Item
    End Function
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...