Gibt es ein Ereignis, das ausgelöst wird, wenn sich die Anzahl der ListViewItems in einer ListView ändert?(Windows Forms)
Frage
Ich möchte einige andere Steuerelemente aktivieren/deaktivieren, je nachdem, wie viele Elemente sich in meinem befinden ListView
Kontrolle.Ich kann auch kein Event finden, das dies tun würde ListView
selbst oder auf der ListViewItemCollection
.Vielleicht gibt es eine Möglichkeit, jede Sammlung in C# allgemein auf Änderungen zu überwachen?
Ich würde mich auch über andere Ereignisse freuen, auch über solche, die manchmal ausgelöst werden, wenn sich die Gegenstände nicht ändern, aber zum Beispiel die ControlAdded
Und Layout
Ereignisse haben nicht funktioniert :(.
Lösung
@Domenic
Ich bin mir nicht ganz sicher. Ich bin im Denkprozess nie so weit gekommen.
Eine andere Lösung könnte darin bestehen, ListView zu erweitern und beim Hinzufügen und Entfernen von Dingen statt .items.add und items.remove Ihre anderen Funktionen aufzurufen.Es wäre immer noch möglich, hinzuzufügen und zu entfernen, ohne dass Ereignisse ausgelöst werden, aber mit einer kleinen Überprüfung des Codes, um sicherzustellen, dass .items.add und .items.remove nicht direkt aufgerufen werden, könnte es ganz gut funktionieren.Hier ist ein kleines Beispiel.Ich habe nur 1 Add-Funktion gezeigt, aber es gibt 6, die Sie implementieren müssten, wenn Sie alle verfügbaren Add-Funktionen nutzen möchten.Es gibt auch .AddRange und .Clear, die Sie sich vielleicht ansehen sollten.
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
Andere Tipps
Ich kann keine Ereignisse finden, die Sie verwenden könnten.Vielleicht könnten Sie eine Unterklasse von ListViewItemCollection erstellen und Ihr eigenes Ereignis auslösen, wenn etwas hinzugefügt wird, mit einem ähnlichen Code wie diesem.
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
Ich denke, das Beste, was Sie hier tun können, ist, ListView in eine Unterklasse zu unterteilen und die gewünschten Ereignisse bereitzustellen.