Gibt es ein Ereignis, das ausgelöst wird, wenn sich die Anzahl der ListViewItems in einer ListView ändert?(Windows Forms)

StackOverflow https://stackoverflow.com/questions/47169

  •  09-06-2019
  •  | 
  •  

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 :(.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top