3

我想根据我控制的项目数量启用/禁用其他一些控件ListView。我找不到任何可以做到这一点的事件,无论是在ListView它本身还是在ListViewItemCollection. 也许有一种方法可以通用地观察 C# 中的任何集合以进行更改?

我也会对其他事件感到满意,即使是有时在项目不更改时触发的事件,但例如ControlAddedandLayout事件不起作用:(。

4

3 回答 3

2

@Domenic

不太确定,在思考过程中从未走得那么远。

另一种解决方案可能是扩展 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
于 2008-09-06T02:26:58.253 回答
0

我找不到您可以使用的任何事件。也许您可以继承 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
于 2008-09-06T01:47:31.423 回答
0

我认为您可以在这里做的最好的事情是继承 ListView 并提供您想要的事件。

于 2008-09-06T02:17:48.837 回答