2008-09-06 21 views
3

ListViewコントロールに含まれるアイテムの数に基づいて、他のいくつかのコントロールを有効/無効にしたいと考えています。これを行うイベントは、ListViewまたはListViewItemCollectionのいずれでも見つかりません。たぶん、C#のコレクションを一般的に見て変更する方法がありますか?ListView内のListViewItemの数が変更された場合にトリガするイベントはありますか? (Windowsフォーム)

項目は変更しないとき、私は、あまりにも時々火災も含め、他のイベントと幸せになると思いますが、例えばControlAddedLayoutイベントは:(動作しませんでした。

答えて

2

@Domenic

あまり確かではありませんが、思考過程の中でそれほど大したことはありません。

別の解決策は、あなたが他の関数を呼び出して、リストビューを拡張し、ものを追加および削除するときに、代わりに.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 
+0

これまでの変更ではなく、変更を加えてイベントを発生させる方がよいと思います。あるいは、あなたは2つの出来事を持つことができます。前にはRaiseEvent ItemAdding();、後にはRaiseEvent ItemAdded();があります。 –

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 
0

私はあなたがここにできる最善のことは、サブクラスにあると思いますリストビューし、必要なイベントを提供します。

関連する問題