Controls zur Laufzeit erstellen lassen

Controls zur Laufzeit erstellen lassen

Man kann in VB auch während der Programmausführung Controls erstellen bzw. hinzufügen.
Dazu gibt es verschiedene Möglichkeiten.

Möglichkeit 1:
Instanzieren und erzeugen der Steuerelemente

Zuerst wird dem Formular mitgeteilt, über welche Steuerelemente es verfügt, d.h. sie müssen erst instanziert werden.
Dim WithEvents Button1 As CommandButton

„Button1“ soll hier der „CommandButton“ Name sein.

Nun werden sie erzeugt.
Set Button1 = Form1.Controls.Add("VB.CommandButton", "Button1")

„VB.CommandButton“ ist die sog. „ProgID“. Diese bestimmt die Objekte. (z.B. die in der Werkzeugliste)

Jetzt können die Eigenschaften erstellt werden.
Button1.Move 0, 0
Button1.Visible = True

Ein Codebeispiel, wie man es machen könnte:

Dim WithEvents Button1 As CommandButton
Dim WithEvents PBox1 As PictureBox
Dim WithEvents TBox1 As TextBox
Private Sub Form_Load()
‚ Neuen Button laden
Set Button1 = Form1.Controls.Add(„VB.CommandButton“, „Button1“)
Button1.Move 0, 0
Button1.Visible = True

‚PictureBox erstellen
Set PBox1 = Form1.Controls.Add(„VB.PictureBox“, „PBox1“)
PBox1.Move 0, 500
PBox1.Visible = True

‚Textbox erstellen
Set TBox1 = Form1.Controls.Add(„VB.TextBox“, „TBox1“)
TBox1.Move 0, 1000
TBox1.Visible = True
End Sub

Möglichkeit 2:
Vervielfältigen von Steuerelementen

Nehmen wir an, wir wollen wieder einen oder mehrere „CommandButton“ zur Laufzeit hinzufügen.

Dazu plaziert man einen „CommandButton“ (Name: Command1) auf der „Form“.
Dann nochmals einen „CommandButton“ (Name: Command2).
Jetzt kommt ein wichtiger Schritt: man muss dem „CommandButton“, den man vervielfältigen will, den Index „0“ zuweisen, also den „Command2“!
Mit Hilfe einer Schleife können beliebig viele „CommandButton“ hinzugefügt werden.
Dabei wird immer der Index um eins erhöht.

Ein Codebeispiel, wie man es machen könnte:

Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 5
Load Command2(i)
Command2(i).Top = Command2(i – 1).Top + Command2(i – 1).Height + 120
Command2(i).Visible = True
Next i
End Sub