VB.NET AddHandler
Inhaltsverzeichnis
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 AddHandler–Aweisung 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 AddHandler–Anweisung zu verwenden.
Die übliche Weise
Wer in seiner Zeit als VB.NET Entwickler schon mit Handlern gearbeitet hat, kennt mithin die beispielhaften Struktur(en):
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 Sub–Block 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 AddHandler–Anweisung.
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 🤓.
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 GenerateNumpad–Methode 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