5.6 Delegates
Mithilfe von Delegates kann man Verweise auf Ereignismethoden erstellen. Sie werden sich fragen, wozu dies nötig ist, da wir Methoden zu den verschiedenen Ereignissen unserer Steuerelemente ja einfach über das Eigenschaftenfenster erzeugen können. Was ist aber mit Steuerelementen, die erst zur Laufzeit des Programms erzeugt werden? Hier kommen die Delegates ins Spiel.
Im nachfolgenden Beispiel im Projekt Delegates können wir im Formular per Klick auf den oberen Button beliebig viele, zusätzliche Buttons erzeugen. Zu jedem dieser Buttons gibt es dann auch eine Ereignismethode. Diese dient hier im Beispiel dazu, den Button wieder aus dem Formular zu löschen. In Abbildung 5.7 sehen Sie das Formular nach dem Erzeugen von vier zusätzlichen Buttons und dem Löschen der ersten beiden zusätzlichen Buttons.
Abbildung 5.7 Buttons, zur Laufzeit erzeugt bzw. gelöscht
Zunächst das Programm:
Public Class Form1
Dim YPos As Integer = 44
Dim Nr As Integer = 1
Private Sub cmdErzeugen_Click(...) Handles ...
Dim neuerButton As New Button
neuerButton.Location = New Point(12, YPos)
neuerButton.Size = New Size(75, 26)
neuerButton.Text = Nr
AddHandler neuerButton.Click,
AddressOf neuerButton_Click
Controls.Add(neuerButton)
YPos = YPos + 32
Nr = Nr + 1
End Sub
Private Sub neuerButton_Click(
sender As Object, e As EventArgs)
Controls.Remove(sender)
Dim senderButton As Button
senderButton = sender
MessageBox.Show("Button " & senderButton.Text &
" wurde gelöscht")
End Sub
End Class
Listing 5.13 Projekt Delegates
Zur Erläuterung:
- Die beiden Eigenschaften YPos und Nr der Klasse Form1 dienen für die Y-Position und die laufende Nummer der neuen Buttons. Der erste Button wird bei Y = 44 erscheinen und die Nummer 1 tragen.
- In der Ereignismethode cmdErzeugen_Click() wird ein neues Objekt des Typs Button erzeugt. Über die Eigenschaften Location, Size und Text bekommt es Lage, Größe und Aufschrift zugewiesen.
- Dem Ereignis Click dieses neuen Buttons wird mithilfe von AddHandler ein Ereignis-Handler zugeordnet. Dies ist die Methode neuerButton_Click(). Die Adresse dieser Methode wird mithilfe von AddressOf zugewiesen. Dies bedeutet: Falls auf den neuen Button geklickt wird, dann startet der Code in neuerButton_Click(). Lassen Sie sich nicht irritieren: Solange diese Methode noch nicht existiert, wird ein Fehler gemeldet.
- Die Methode Add() fügt der Auflistung Controls den neuen Button hinzu. Damit erscheint er im Formular. Die Auflistung Controls ist eine Eigenschaft des Formulars und umfasst alle darin vorhandenen Steuerelemente.
- Die beiden Eigenschaften YPos und Nr der Klasse Form1 bekommen neue Werte, für den nächsten Button.
- Es folgt die Methode neuerButton_Click(), die für das Ereignis Click aller zusätzlichen Buttons dient. Im Methodenkopf stehen, wie bisher, die beiden Objekte der Klasse Object bzw. EventArgs. Handles entfällt, da bereits bekannt ist, welches Ereignis durch diese Methode behandelt wird.
- Der betreffende Button wird mithilfe der Methode Remove() wieder aus der Auflistung Controls gelöscht, er verschwindet also wieder.
- Damit wir eine Information bekommen können, welcher Button gelöscht wurde, wird zunächst ein neuer Verweis auf einen Button angelegt. Mit senderButton = sender verweist dieser Verweis auf den auslösenden Button. Dessen Aufschrift ist die laufende Nummer.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.