Est-il un événement qui se déclenche si le nombre de ListViewItems dans une liste des changements?(Windows Forms)

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

  •  09-06-2019
  •  | 
  •  

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top