winforms - una - ¿Hay algún evento que se active si cambia el número de ListViewItems en un ListView?(Formularios de Windows)
eventos del mouse en c# (3)
@Domenic
No estoy seguro, nunca llegué tan lejos en el proceso de pensamiento.
Otra solución podría ser ampliar ListView, y al agregar y eliminar cosas, en lugar de llamar .items.add y items.remove, usted llama a sus otras funciones. Todavía sería posible agregar y eliminar sin que se generen eventos, pero con una pequeña revisión del código para asegurarse de que .items.add y .items.remove no se hayan invocado directamente, podría funcionar bastante bien. Aquí hay un pequeño ejemplo. Solo mostré 1 función Agregar, pero hay 6 que debe implementar si desea utilizar todas las funciones de adición disponibles. También hay .AddRange, y. Apúntate que tal vez quieras echarle un vistazo.
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
Me gustaría habilitar / deshabilitar algunos otros controles basados en cuántos elementos hay en mi control ListView
. No puedo encontrar ningún evento que pueda hacer esto, ya sea en ListView
o en ListViewItemCollection
. Tal vez hay una forma de ver genéricamente cualquier colección en C # para los cambios?
Sería feliz con otros eventos también, incluso los que a veces se disparan cuando los elementos no cambian, pero por ejemplo los eventos ControlAdded
y Layout
no funcionaron :(.
Creo que lo mejor que puede hacer aquí es subclase ListView y proporcionar los eventos que desee.
No puedo encontrar ningún evento que puedas usar. Quizás podría subclase ListViewItemCollection y generar su propio evento cuando se agrega algo, con un código similar a este.
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