VB.NET AddHandler

VB.NET AddHandler
VB.NET AddHandler

VB.NET AddHandler

Du möchtest wissen wie man mit der VB.NET AddHandler Anweisung umgeht und wie Du damit dynamisch Ereignishandler verknüpfen kannst?

Dann würde ich sagen, dass Du goldrichtig bist und hier in meinem ausführlichen, aber einfachen Beitrag alles wichtige lernen wirst.

Vielleicht interessieren Dich auch noch andere Beiträge wie: Application Path, Form Close Event, String zerlegen.

Hintergrund – VB.NET AddHandler

Die AddHandlerAweisung ist für die dynamische Zuordnung von Ereignishandlern zu Objekt-Ereignissen zuständig.

Damit ist Sie ein wesentlicher Bestandteil der objektorientierten Programmierung und somit auch von den .NET-Sprachen.

Im Folgenden werde ich auf die einzelnen Einsatzbereiche und passende Beispiele eingehen, die AddHandlerAnweisung zu verwenden.

Die übliche Weise

Wer in seiner Zeit als VB.NET Entwickler schon mit Handlern gearbeitet hat, kennt mithin die beispielhaften Struktur(en):

VB.NET normale Ereignishandler Struktur
VB.NET normale Ereignishandler Struktur

Auch wenn unser Fokus im Zuge dieses Beitrages sicherlich speziell auf den Nummern 3, 6, 7 und 8 liegt, erkläre ich dennoch auch nochmal die anderen Punkte.

1. Zugriffsmodifizierer

Bei Nummer 1 handelt es sich um den Zugriffsmodifizierer, Welcher den Zugriff auf das jeweilige Element und in diesem Fall die Methode regelt.

2. Blocktyp / Element

Die Nummer 2 ist die Art des Blocktyps, bzw. um eine Art des Elements, Welches im oberen Beispiel ein SubBlock ist und daher eine Methode ohne Rückgabe deklariert.

3. Methoden-Name

Der dritte Punkt beschreibt den Namen der Methode, in unserem Beispiel „btnAddHandler_Click“.

Für gewöhnlich setzt der Name der Handler-Methode sich aus dem Namen des Elements und dessen zu behandelnden Ereignis zusammen.

4. sender

Beim vierten Punkt handelt es sich um das Objekt, Welches das Ereignis ausgelöst hat.

5. EventArgs

Die EventArgs-Klasse stellt eine Basisklasse für die Überlieferung von Ereignisdaten dar, wovon eigene Klassen erben können.

6. Handles-Klausel

Bei der Handles-Klausel handelt es sich um eine Art Anweisung, Welche dem Compiler mitteilt, dass eine gewisse Methode ein bestimmtes Ereignis eines Objektes verarbeitet.

7. Name des Elements

Hierbei handelt es sich um den Namen des Elements, dessen Ereignis verarbeitet werden soll.

8. Ereignis

Der achte Punkt bezeichnet das Ereignis, Welches unter anderem durch den angegebenen Ereignishandler verarbeitet wird.

9. Code

Hier ist der Platz für den Body der Methode, sprich dem Code, der beim Auslösen des Ereignisses verarbeitet wird.

10. Block-Schluss

Mit der End-Sub Anweisung wird hier der Body der Methode und somit der Block geschlossen.

Dynamischer Weg – VB.NET AddHandler

Kommen wir nachdem ich im letzten Abschnitt nochmal die Basics wiederholt habe, im nächsten Abschnitt zur AddHandlerAnweisung.

Man verwendet diese Anweisung, wenn man wie oben schon angesprochen, Ereignisse von Elementen zur Laufzeit mit einem Ereignishandler verknüpfen möchte.

Beispiel-Szenario – Numpad Tastatur

Nun suchen wir uns neben den Textereien mal ein konkretes Beispiel und setzen Dieses gleich in die Tat um!

Ich denke da gerade an etwas wie eine virtuelle kleine Tastatur im Numpad Stil.

Diese könnte zusammengeklickt im Designer wie folgt aussehen, aber wir fassen den Designer für die Buttons nicht an 🤓.

VB.NET AddHandler Numpad Tastatur
VB.NET AddHandler Numpad Tastatur

Code – VB.NET AddHandler

Was wir ruhig im Designer machen können, ist ein FlowLayoutPanel hinzuzufügen, Welches dann die Buttons wie gewünscht anordnet.

Mit der Größe kannst Du ja während der Entwicklung schauen, oder die Größe meines Panels von 188; 254 nehmen.

Danach gehen wir dann an den Load-Ereignishandler der Form und fangen dort mit der Generierung der Buttons an:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim keys = New List(Of String) From {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "00", ","}
        GenerateNumpad(keys)
    End Sub

Im ersten Schritt legen wir uns eine Liste an Tasten an, um dann durch Diese gleich iterieren zu können.

Danach rufen wir die Sub-Methode namens GenerateNumpad auf und übergeben dabei die Keys als Parameter.

    Private Sub GenerateNumpad(keys As List(Of String))
        For Each key In keys
            Dim numpadButton = GenerateNumpadButton(key)
            flpNumpad.Controls.Add(numpadButton)
        Next
    End Sub

Die GenerateNumpadMethode durchläuft die einzelnen keys der Auflistung und generiert durch Aufruf der GenerateNumpadButton-Sub jeweils einen Button.

    Private Function GenerateNumpadButton(key As String) As Button
        Dim btn = New Button()
        With btn
            .Size = New Size(50, 50)
            .BackColor = Color.White
            .FlatStyle = FlatStyle.Flat
            .FlatAppearance.BorderSize = 2
            AddHandler .Click, AddressOf NumpadButton_Click
        End With
        Return btn
    End Function

Im letzten Teil des With-Blocks verwenden wir die AddHandler-Anweisung, um unsere erstellte Methode dem Klick-Ereignis zuzuweisen.

Der Klick-Handler sieht so aus:

    Private Sub NumpadButton_Click(sender As Object, e As EventArgs)
        Dim btn = CType(sender, Button)
        Debug.WriteLine($"Clicked key: {btn.Text}")
    End Sub

Wir greifen uns dort den geklickten Button durch eine Umwandlung des Senders ab und geben anschließend den Text des Buttons – also den Key – aus.

Dieser Button wird dann anschließend oben in unser erstelltes FlowLayoutPanel hinzugefügt.

Kompletter Code – VB.NET AddHandler

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim keys = New List(Of String) From {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "00", ","}
        GenerateNumpad(keys)
    End Sub

    Private Sub GenerateNumpad(keys As List(Of String))
        For Each key In keys
            Dim numpadButton = GenerateNumpadButton(key)
            flpNumpad.Controls.Add(numpadButton)
        Next
    End Sub

    Private Function GenerateNumpadButton(key As String) As Button
        Dim btn = New Button()
        With btn
            .Size = New Size(50, 50)
            .BackColor = Color.White
            .FlatStyle = FlatStyle.Flat
            .FlatAppearance.BorderSize = 2
            .Text = key
            AddHandler .Click, AddressOf NumpadButton_Click
        End With
        Return btn
    End Function

    Private Sub NumpadButton_Click(sender As Object, e As EventArgs)
        Dim btn = CType(sender, Button)
        Debug.WriteLine($"Clicked key: {btn.Text}")
    End Sub

End Class

Downloads – VB.NET AddHandler

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.