Winforms 如果ListView中ListViewItems的数量发生变化,是否会触发事件?(Windows窗体)
我想根据我的Winforms 如果ListView中ListViewItems的数量发生变化,是否会触发事件?(Windows窗体),winforms,events,listview,Winforms,Events,Listview,我想根据我的ListView控件中的项目数量启用/禁用一些其他控件。我在ListView本身或ListViewItemCollection上找不到任何可以执行此操作的事件。也许有一种方法可以在C#中查看任何集合的变化 我对其他事件也很满意,即使是在项目没有更改时有时会触发的事件,但例如ControlAdded和Layout事件不起作用:(.我找不到任何您可以使用的事件。也许您可以将ListViewItemCollection子类化,并在添加内容时引发您自己的事件,代码与此类似 Public Cl
ListView
控件中的项目数量启用/禁用一些其他控件。我在ListView
本身或ListViewItemCollection
上找不到任何可以执行此操作的事件。也许有一种方法可以在C#中查看任何集合的变化
我对其他事件也很满意,即使是在项目没有更改时有时会触发的事件,但例如
ControlAdded
和Layout
事件不起作用:(.我找不到任何您可以使用的事件。也许您可以将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
我认为您在这里可以做的最好的事情是对ListView进行子类化,并提供所需的事件。@Domenic 不太确定,在思考过程中从未走那么远 另一种解决方案可能是扩展ListView,在添加和删除内容时,您可以调用其他函数,而不是调用.items.add和.items.remove。在不引发事件的情况下,仍然可以添加和删除内容,但需要进行一些代码检查,以确保没有直接调用.items.add和.items.remove,这可能会起作用非常好。这里有一个小例子。我只展示了1个Add函数,但如果您想使用所有可用的Add函数,则必须实现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
我认为最好在进行更改后引发事件,而不是在更改之前。或者,您可以有两个事件。
RaiseEvent itemsadding();
用于更改之前,而RaiseEvent itemsadded();
用于更改之后。