Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0316: Steuerelemente aus dem Nichts zur Laufzeit erstellen

 von 

Beschreibung 

Wer Steuerelemente erst zur Laufzeit aufs Form bringen will, kann zum einen die Methode des Nachladens über ein Array nutzen, wobei dann aber doch mindestens ein Original-Steuerelement vorab vorhanden sein muß, oder aber ab VB6 die Controls.Add nehmen Diese gestattet es Controls aus dem "Nichts" zu holen. Was allerdings auf diese Art nicht funktioniert, ist das Generieren von Feldern.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,01 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'-------- Anfang Formular "Form1" alias MDIForm1.frm --------

Option Explicit

Private WithEvents CommandButtonNeu As CommandButton
Private WithEvents TextBoxNeu As TextBox

Private Sub Form_Load()
    Set CommandButtonNeu = Form1.Controls.Add("VB.CommandButton", _
        "CommandButtonNeu", Form1)
                                            
    With CommandButtonNeu
        .Visible = True
        .Width = 1800
        .Height = 600
        .Caption = "Hier klicken"
        .Top = 300
        .Left = 300
    End With
    
    Set TextBoxNeu = Form1.Controls.Add("VB.TextBox", _
        "TextBoxNeu", Form1)
    
    With TextBoxNeu
        .Visible = True
        .Width = 1800
        .Height = 600
        .Text = "Hier klicken"
        .Top = 930
        .Left = 300
    End With
End Sub

Private Sub CommandButtonNeu_Click()
    MsgBox "Guten Tach ich bin's, der neue Button"
    
    With TextBoxNeu
        .SelStart = 0
        .SelLength = Len(.Text)
        .SetFocus
    End With
End Sub

Private Sub TextBoxNeu_Click()
    MsgBox "Guten Tach ich bin's, die neue TextBox"
End Sub
'--------- Ende Formular "Form1" alias MDIForm1.frm ---------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 11 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Dave84620 am 30.03.2009 um 23:30

Hey,

http://www.visualbasic.at/old/main.php?id=63&kz=3&idb=2&main=tippsdetail

hier wird eine sehr simple Möglichkeit gezeigt, Steuerelemente zu vervielfältigen. In den meisten Fällen ist es doch möglich, ein Steuerelement zu erzeugen, um es dann x-mal erscheinen zu lassen.

Ich erlaube mir, die Website zu zitieren:

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

Schöne Grüße
Dave

Kommentar von Thomas am 14.11.2007 um 15:30

Kann ich so auch WinSock Elemente dynamisch erzeugen?
Wenn ja, wie und wie kann ich dann auf die Methoden z.B. DataArrival zugreifen

Kommentar von Tobias Vigl am 19.03.2007 um 11:05

Habe die selbe Frage wie Christian Schuch und Laurens Stoetzel.
Ich weiss erst zur Laufzeit, wieviele Objekte ich generieren moechte. Laesst mein dafuer benutztes Array aus Objekten indizierte Ereignisprozeduren zu?
Wie kann ich das realisieren?

Kommentar von W. Ratke am 12.12.2006 um 08:36

Diese Declaration kann ich nicht eingeben.
Was muss ich beachten?

Attribute CommandButtonNeu.VB_VarHelpID = -1

Danke vorraus.
mfg W. Ratke

Kommentar von Christian Schuch am 29.01.2006 um 20:36

Ich habe das gleiche Problem wie Laurens Stoetzel, ich möchte gerne daß eine unbegrenzte Menge an Steuerelementen, welche sich auf unterschiedlichen Formularseiten befinden und auch nur auf diesen Seiten operieren sollen aber immer wieder auf die selbe Eventroutine zurückgreifen sollen, aber mit WithEvents funktioniert das nicht bei Arrays und das Hinzufügen von Handlern mittels AddHandler scheint irgendwie auch nicht zu funktionieren.

Bin für jede Hilfe dankbar !

Kommentar von Edgar Berner am 24.08.2005 um 05:39

Das ist ein prima Tip.

Ich hätte nur die gleichen Fragen wie meine Vorredner. Gibt es auf deren Fragen Antworten, die man nachlesen kann?

Wäre über eine entspr. Info dankbar.

Kommentar von Laurens Stoetzel am 01.01.2004 um 15:33

Ist es auch möglich auf diese Weise ein Array von Objekte mit verschiedenen Indizes zu erstellen? Da bei meinem Programm zur Entwurfszeit nicht feststeht wieviele Objekte erstellt werden und ich nicht einfach für 100 Controls im Vorraus die Events schreiben möchte, würde ich gerne ein Steuerelementfeld erstellen. Die Eigenschaft 'Index' lässt sich allerdings zur Laufzeit nicht ändern, deshalb weiß ich leider gerade nicht weiter. Bin für jede Hilfe dankbar!

Kommentar von Eckhart Wörner am 06.05.2003 um 14:52

Kann man da vielleicht auch noch was über das VBControlExtender-Objekt einbinden?

Kommentar von Shaggy am 22.07.2002 um 13:25

Danke für den Tip ist echt sehr hilfreich! Jedoch bleibt bei mir eine Frage offen und zwar, wie kann ich bestimmte Ereignisse auslösen, wenn ich z.B. einen Button erstelle???
Das wäre einmal ein super Tip!!
Danke!

Kommentar von Gabriel am 04.07.2001 um 14:20

Es scheint leider nicht für Menüs zu funktionieren!
Gibt es da ne andere Lösung?

Kommentar von TH am 09.03.2001 um 11:59

Mich interessiert, ob das auch bei Steuerelementen von Drittanbietern funktioniert. Konkreter: Wie kann man dafür bestimmte Ereignisprozeduren erstellen?