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.
EDIT: Konstanten ausgebessert, die hinzugefügten Items werden nun auch mit nach aussen geliefert. Bei entfernten Items lediglich der ItemCount.
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
- Imports System.Runtime.InteropServices
- Public Class CustomListBox : Inherits ListBox
- Public Event ItemsAdded As EventHandler(Of CustomListBoxItemsAddedEventArgs)
- Public Event ItemsRemoved As EventHandler(Of CustomListBoxItemsRemovedEventArgs)
- Private Const LB_ADDSTRING As Integer = &H180 'Item wird hinzugefügt
- Private Const LB_DELETESTRING As Integer = &H182 'Item wird gelöscht
- Private Const LB_RESETCONTENT As Integer = &H184 'Alle Items werden per .Clear gelöscht
- Private Const LB_INSERTSTRING As Integer = &H181 'Item wird per Insert eingefügt
- Protected Overrides Sub WndProc(ByRef m As Message)
- Select Case m.Msg
- Case LB_ADDSTRING
- OnItemsAdded(MyBase.Items.Count, GetString(m.LParam))
- Case LB_DELETESTRING
- OnItemsRemoved(MyBase.Items.Count)
- Case LB_RESETCONTENT
- 'Bei .Clear() wird der ItemCount nicht sofort aktualisiert, somit wird hier 0 übergeben
- OnItemsRemoved(0)
- Case LB_INSERTSTRING
- OnItemsAdded(MyBase.Items.Count, GetString(m.LParam))
- End Select
- MyBase.WndProc(m)
- End Sub
- Private Function GetString(ptr As IntPtr) As String
- Return Marshal.PtrToStringAuto(ptr)
- End Function
- Protected Overridable Sub OnItemsAdded(itemCount As Integer, item As String)
- RaiseEvent ItemsAdded(Me, New CustomListBoxItemsAddedEventArgs(itemCount, item))
- End Sub
- Protected Overridable Sub OnItemsRemoved(itemCount As Integer)
- RaiseEvent ItemsRemoved(Me, New CustomListBoxItemsRemovedEventArgs(itemCount))
- End Sub
- End Class
VB.NET-Quellcode
- Public Class CustomListBoxItemsEventArgsBase : Inherits EventArgs
- Public ReadOnly ItemCount As Integer
- Public Sub New(itemCount As Integer)
- Me.ItemCount = itemCount
- End Sub
- End Class
- Public Class CustomListBoxItemsRemovedEventArgs : Inherits CustomListBoxItemsEventArgsBase
- Public Sub New(itemCount As Integer)
- MyBase.New(itemCount)
- End Sub
- End Class
- Public Class CustomListBoxItemsAddedEventArgs : Inherits CustomListBoxItemsEventArgsBase
- Public ReadOnly AddedItem As String
- Public Sub New(itemCount As Integer, item As String)
- MyBase.New(itemCount)
- Me.AddedItem = item
- End Sub
- 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.
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SpaceyX“ ()