3

コントロール内のアイテムの数に基づいて、他のいくつかのコントロールを有効/無効にしたいのですがListViewListViewそれ自体またはで、これを行うイベントが見つかりません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 に答える