2008-09-06 9 views
3

ListView denetimimde kaç tane öğeye bağlı olarak diğer bazı denetimleri etkinleştirmek/devre dışı bırakmak istiyorum. Bunu, ListView'un kendisinde veya ListViewItemCollection'da gerçekleştirecek hiçbir etkinlik bulamıyorum. Belki de C# içindeki herhangi bir koleksiyonu genel olarak izlemek için bir yol var mı?ListView'de ListViewItems sayısının değişip değişmediğini tetikleyen bir olay var mı? (Windows Forms)

Ben diğer etkinlikler öğeler değişmez zaman bazen ateş de bile olanlar ile mutlu olurdu ama örneğin ControlAdded ve Layout olaylar :(çalışmadı.

cevap

2

@Domenic

Çok emin olmadı, asla düşünce sürecinde bu kadar uzağa gitmedi.

Başka bir çözüm, ListView'i genişletmek ve bir şeyler ekleyip çıkarırken .items.add ve items.remove yerine, diğer işlevlerinizi çağırmak olabilir. Kaldırılmaksızın etkinlik eklemek ve kaldırmak mümkün olsa da, .items.add ve .items.remove'un doğrudan çağrılmadığından emin olmak için küçük bir kod incelemesi yapılarak, oldukça iyi bir şekilde çalışabilir. İşte küçük bir örnek. Sadece 1 Ekle fonksiyonu gösterdim, ancak mevcut tüm eklenti işlevlerini kullanmak istiyorsanız, 6 tane uygulamanız gerekecek. Ayrıca .AddRange ve .Görünmek isteyebileceğinizden emin olun.

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

Daha önce yerine, değişikliği yapmak _after_ olayı yükseltmek daha iyi olacağını düşünürdüm. Ya da iki olayın olabilir. RaiseEvent ItemAdding(); 'öncesi için ve RaiseEvent ItemAdded();' sonrası için. –

0

Yapamam Eğer Belki ListViewItemCollection alt sınıfı ve bir şey eklendiğinde buna benzer kodla, kendi olay artırabilir. Kullanabileceğimiz herhangi etkinlikleri bulun.

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

burada yapabileceğiniz en iyi şey alt sınıfı için olduğunu düşünüyorum ListView ve istediğiniz olayları sağlayın

İlgili konular