Rubrik: Controls | VB-Versionen: VB2005, VB2008 | 04.05.10 |
Steuerelementfelder und deren Indentifizierung in einem Ereignis Ein Beispiel, wie man die unter VB6 bekannte Steuerelementfeld-Funktionalität in VB.NET nachbilden kann. | ||
Autor: Christoff Bitter | Bewertung: | Views: 11.138 |
ohne Homepage | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Bei VB6 konnte man noch über einen Index und die Load Methode Steuerelementenfelder anlegen. Der Index wurde bei jedem Ereignis mit übergeben.
In VB.net ist das nicht mehr möglich. Nach dem Anlegen eines Feldes (siehe Quelltext) wird mit dem AddHandler auf eine Ereignisprozedure verwiesen.
Doch wie rufe ich nun in der Ereignisprozedur den Index des Ereignis auslösenden Steuerelemtns ab? Hier eine Lösung.
Public Class Form1 Private ButtonArray(9) As Button ' Array initalisieren
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Dim x As Integer = 5 Dim y As Integer = 5 ' 10 Buttons neu erzeugen For z As Byte = 0 To 9 ' Neuen Button erzeugen ButtonArray(z) = New Button ' ControlInstanz erzeugen ' Den erzeugten Button verwenden: With ButtonArray(z) ' Control zur Liste der Controls hinzufügen und anzeigen Controls.Add(ButtonArray(z)) ' Werte für Control setzen .Name = "Button" & CStr(z) .TabIndex = z .Tag = z ' Hier wird der Index eingetragen .Text = .Name If z = 5 Then x = 200 : y = 5 .SetBounds(x, y, 150, 40) y += .Height + 5 ' Auf das Click-Ereignis reagieren können: AddHandler .Click, AddressOf ButtonArray_Click End With Next z End Sub
Private Sub ButtonArray_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) ' Click-Ereignis des Button auslösen. Index wurde in der ' Tag Eigenschaft mit übergeben. Dim ButtonClick As Button = CType(sender, Button) ' Index aus der Tag zurückholen MessageBox.Show("Button" & CStr(ButtonClick.Tag)) End Sub
End Class