ListBox ItemsAdded/Removed-Events

    • VB.NET

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

      ListBox ItemsAdded/Removed-Events

      Hey Leute,

      hier mal wieder eine Kleinigkeit von mir. Eine CustomListBox, die ein Event auslöst, wenn ein Item/Items hinzugefügt, respektive entfernt wird. Genutzt wird hierfür die WndProc-Methode der ListBox-Klasse. In dieser Methode werden die Windows-Messages ausgewertet und das entsprechende Event ausgelöst. Die CustomListBoxItemsEventArgs führen den aktuellen ItemCout der ListBox nach aussen. Der Code ist mit ein paar Kommentaren versehen, wo ich dachte, dass es nötig ist. Wer Verbesserungsvorschläge hat, immer raus damit.

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class CustomListBox : Inherits ListBox
      3. Public Event ItemsAdded As EventHandler(Of CustomListBoxItemsAddedEventArgs)
      4. Public Event ItemsRemoved As EventHandler(Of CustomListBoxItemsRemovedEventArgs)
      5. Private Const LB_ADDSTRING As Integer = &H180 'Item wird hinzugefügt
      6. Private Const LB_DELETESTRING As Integer = &H182 'Item wird gelöscht
      7. Private Const LB_RESETCONTENT As Integer = &H184 'Alle Items werden per .Clear gelöscht
      8. Private Const LB_INSERTSTRING As Integer = &H181 'Item wird per Insert eingefügt
      9. Protected Overrides Sub WndProc(ByRef m As Message)
      10. Select Case m.Msg
      11. Case LB_ADDSTRING
      12. OnItemsAdded(MyBase.Items.Count, GetString(m.LParam))
      13. Case LB_DELETESTRING
      14. OnItemsRemoved(MyBase.Items.Count)
      15. Case LB_RESETCONTENT
      16. 'Bei .Clear() wird der ItemCount nicht sofort aktualisiert, somit wird hier 0 übergeben
      17. OnItemsRemoved(0)
      18. Case LB_INSERTSTRING
      19. OnItemsAdded(MyBase.Items.Count, GetString(m.LParam))
      20. End Select
      21. MyBase.WndProc(m)
      22. End Sub
      23. Private Function GetString(ptr As IntPtr) As String
      24. Return Marshal.PtrToStringAuto(ptr)
      25. End Function
      26. Protected Overridable Sub OnItemsAdded(itemCount As Integer, item As String)
      27. RaiseEvent ItemsAdded(Me, New CustomListBoxItemsAddedEventArgs(itemCount, item))
      28. End Sub
      29. Protected Overridable Sub OnItemsRemoved(itemCount As Integer)
      30. RaiseEvent ItemsRemoved(Me, New CustomListBoxItemsRemovedEventArgs(itemCount))
      31. End Sub
      32. End Class


      VB.NET-Quellcode

      1. Public Class CustomListBoxItemsEventArgsBase : Inherits EventArgs
      2. Public ReadOnly ItemCount As Integer
      3. Public Sub New(itemCount As Integer)
      4. Me.ItemCount = itemCount
      5. End Sub
      6. End Class
      7. Public Class CustomListBoxItemsRemovedEventArgs : Inherits CustomListBoxItemsEventArgsBase
      8. Public Sub New(itemCount As Integer)
      9. MyBase.New(itemCount)
      10. End Sub
      11. End Class
      12. Public Class CustomListBoxItemsAddedEventArgs : Inherits CustomListBoxItemsEventArgsBase
      13. Public ReadOnly AddedItem As String
      14. Public Sub New(itemCount As Integer, item As String)
      15. MyBase.New(itemCount)
      16. Me.AddedItem = item
      17. End Sub
      18. End Class


      EDIT: Konstanten ausgebessert, die hinzugefügten Items werden nun auch mit nach aussen geliefert. Bei entfernten Items lediglich der ItemCount.
      Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
      Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SpaceyX“ ()