Hallo!
Wenn Du eine größere Zahl von Controls in einem Formular bzw. Fenster oder Container
benötigst, erledige das nicht im Designer, sondern erstelle diese Controls in einer
Code-Schleife. Richte dabei die Einstellungen ein und weise die Referenzen auf
ein Array, eine generische Liste oder eine generische Dictionary zu.
Die Zuordnung von Eventhandler-Routinen zu den Controls wird dabei nicht per
Withevents/Handles-Klausel vorgenommen, sondern über die AddHandler-Methode unter
Nutzung des Addressof-Operators.
Windows-Forms-Beispiel:
Public Class frmButtonCreate
'Liste zur späteren Aufnahme der Button-Referenzen als Listen-Items
Private Buttons As New List(Of Button)
Private Sub frmButtonCreate_Load(sender As Object, e As EventArgs) Handles _
MyBase.Load
Me.Size = New Size(200, 500)
Dim btn As Button 'Variable für eine Referenz auf ein Button-Objekt
For i As Integer = 1 To 10
'neuen Button erstellen und Eigenschaften einrichten
'Referenz in Variable btn wechselt
btn = New Button With
{.Parent = Me, .Text = "Button_" & i.ToString,
.Top = (i - 1) * 40, .Width = 100}
'Farben einstellen
btn.BackColor = Color.FromArgb(i * 20, i * 20, i * 20)
btn.ForeColor = Color.Red
'Button in Liste anhängen (Listen-Referenz auf Button)
Buttons.Add(btn)
'Click-Eventhandler zuordnen
AddHandler btn.Click, AddressOf Buttons_Click
'weitere Eventhandler zuordnen
AddHandler btn.PreviewKeyDown, AddressOf Buttons_PreviewKeydown
AddHandler btn.KeyDown, AddressOf Buttons_Keydown
Next i
'Einen Button der Liste per Code betätigen (Event wird ausgelöst)
Buttons(5).PerformClick()
'Die Handlerroutine eines Buttons im Code direkt aufrufen
Buttons_Click(Buttons(3), EventArgs.Empty)
End Sub
Private Sub Buttons_Click(sender As Object, e As EventArgs)
Dim btn As Button = DirectCast(sender, Button)
MsgBox(btn.Text & " ist geclickt worden")
End Sub
Private Sub Buttons_Keydown(sender As Object, e As KeyEventArgs)
Dim btn As Button = DirectCast(sender, Button)
MsgBox(btn.Text & " " & e.KeyCode.ToString & " ist betätigt worden.")
End Sub
Private Sub Buttons_PreviewKeydown(sender As Object, e As _
PreviewKeyDownEventArgs)
If e.KeyCode = Keys.Return Or e.KeyCode = Keys.Escape Then e.IsInputKey _
= True
End Sub
End Class |