Est-il un événement qui se déclenche si le nombre de ListViewItems dans une liste des changements?(Windows Forms)
Question
J'aimerais activer/désactiver des autres contrôles basés sur la façon dont de nombreux éléments sont dans mon ListView
de contrôle.Je ne peux pas trouver n'importe quel événement, pour ce faire, soit sur la ListView
lui-même ou sur le ListViewItemCollection
.Peut-être il y a un moyen générique montre de collection en C# pour les changements?
Je serais heureux avec d'autres événements, même ceux que, parfois, le feu lorsque les éléments ne changent pas, mais par exemple la ControlAdded
et Layout
les événements ne fonctionne pas :(.
La solution
@Dominique
Sais pas trop, Jamais assez suis si loin dans le processus de la pensée.
Une autre solution pourrait être d'étendre ListView, et lors de l'ajout et de la suppression des choses, au lieu de l'appeler .éléments.ajouter, et les éléments.supprimer, vous appelez vos autres fonctions.Il serait toujours possible d'ajouter et de supprimer, sans événements étant élevé, mais avec un peu de révision du code pour s'en assurer .éléments.ajouter et .éléments.supprimer n'étaient pas appelé directement, il pourrait tout à fait bien.Voici un petit exemple.J'ai seulement montré 1 Ajouter la fonction, mais il y en a 6 pour la mise en œuvre, si vous voulez utiliser toutes les la disponible ajouter des fonctions.Il y a aussi .AddRange, et .Clair que vous voudrez peut-être jeter un oeil à.
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
Autres conseils
Je ne peux pas trouver n'importe quel événement que vous pourriez utiliser.Vous pourriez peut-être sous-classe ListViewItemCollection, et d'élever votre propre événement quand quelque chose est ajouté, avec un code similaire à cela.
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
Je pense que la meilleure chose que vous pouvez faire, c'est de la sous-classe ListView et de fournir les événements que vous souhaitez.