Samstag, 29. Mai 2010

Steuerelemente zur Laufzeit hinzufügen

Bei fortgeschrittenen Anwendungen wird man irgendwann an den Punkt kommen, an dem man sich nicht mehr mit statischen Formularen zufrieden gibt, sondern dynamisch die Formulare zur Laufzeit ausbauen möchte.
Steuerlemente (Controls) sind im Grunde genommen nichts anderes als Variablen, zum Beispiel vom Typ Button, TextBox etc ... Wie andere Variablen können Sie also auch zur Laufzeit initialisiert werden und müssen dann nur noch dem Formular hinzugefügt werden.
Folgender selbsterklärender Beispielcode fügt bei Ausführung dem Formular einen neuen Button hinzu:
Button NewButton = new Button(); // Variable vom Typ Button initialisieren
NewButton.Width = 100; // Breite festlegen
NewButton.Height = 20; // Höhe festlegen
NewButton.Left = 10; // Abstand vom linken Formularrand
NewButton.Top = 50; // Abstand vom oberen Formularrand
NewButton.Text = "Klick mich"; // Beschriftung des Buttons setzen
this.Controls.Add(NewButton); // hier wird der neue Button dem Formular hinzugefügt

In der letzten Codezeile wird die Buttonvariable der Liste this.Controls hinzugefügt. Diese Liste speichert alle auf dem Formular platzierten Steuerelemente, wird das neu hinzugefügte Steuerelement dieser Liste nicht hinzugefügt, wird es auch nicht angezeigt.

Kommentare:

  1. Und was soll ein solcher Dynamischer Button bewir? Dieser muss ja kompiliert werden und kann nicht dynamisch generiert werden.

    Ähnlich wird es sich doch auch bei anderen Controls auswirken, da ich diese nicht ansteuern kann, da zur Entwicklungszeit noch nicht bekannt ist, wieviele Text-Boxen (oder ähnliches) später dynamisch hinzugefügt würden...

    Ein konkretes Beispiel wäre wunderbar...

    Gruß
    Flo

    AntwortenLöschen
  2. Also ein ganz klassisches Beispiel wäre die automatisierte Anzeige mehrerer Text-Dateien parallel.
    Ich z.B. bekomme häufig Zip-Pakete mit unterschiedlich vielen Log-Dateien.
    Da wird dann im Programm per Code, einfach auf einem Formular ein TabControl generiert und für jede Log-Datei dynamisch zur Laufzeit eine Registerkarte + Textbox pro Log-Datei.

    Ist vlt. etwas quick&dirty, aber funktioniert wunderbar :-)

    Gruß Floh

    AntwortenLöschen
  3. Schönes Beispiel danke, ich hab dynamische Bildfelder z.B. auch schon für die Anzeige von mehreren Bildern benutzt, es werden eben soviele PictureBoxes angelegt wie Bilder eingelesen werden.

    Gruß
    Oliver

    AntwortenLöschen