Entwickler-Ecke
WinForms - Aktion in einer neuen dynamisch erzeugten Form
blumione - Do 25.12.08 03:31
Titel: Aktion in einer neuen dynamisch erzeugten Form
Hallo zusammen
ich möchte dynamisch eine Form erstellen und dort Buttons mit Aktionen einsetzen.
Der ganzer Code steht in der Form1.
Wenn ich jetzt aber eine neue Methode mit einem Button der auf der neuen Form ausführen möchte. gibt es natürlich einen Fehler, da die Steuerelemente nicht vorher existieren. Wie kann ich dann darauf zugreifen?
Das funktioniert noch:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Form Form2 = new Form(); Form2.Show();
Button mache = new Button(); mache.Click += new EventHandler(this. mache_click); Form2.Controls.Add(mache); |
Aber wenn ich in der Form1 noch das schreibe:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void mache_click(object sender, EventArgs e) { lbox.Items.Add("test"); } |
sagt der Kompiler, das die lbox nicht gefunden wurde :(
Freue mich auf eure Antworten.
Schöne Weihnachten!
Lg
jaenicke - Do 25.12.08 05:39
Du darfst die Variablen dann nicht in der Methode deklarieren sondern muss das außerhalb in der Klasse tun. Dann sind die nämlich auch für die Handlermethode erreichbar.
PerryRhodan - Do 25.12.08 08:18
Auf die Schnelle:
C#-Quelltext
1: 2: 3: 4: 5:
| private void mache_click(object sender, EventArgs e) { (Form2.Controls["lbox"] as ListBox).Items.Add("Test"); } |
Theoretisch solltest Du prüfen ob (Controls["lbox"] != null) und ob Type == ListBox ist um auf der sicheren Seite zu sein. Form2 muss dann natürlich noch innerhalb der Grundklasse als Private-Field geführt werden.
JüTho - Do 25.12.08 11:10
Hallo,
der "Unsterbliche" hat im Prinzip recht. Ich habe aber Zweifel, ob das Vorgehen wirklich so sinnvoll ist. Wenn Du vorher weißt, dass Du ein Formular mit einer ListBox und einem Button-Click haben willst, wobei der Button etwas in der ListBox machen soll, warum programmierst Du das dann nicht schon vorher innerhalb von Form2?
Das neue Formular selbst kann natürlich zur Laufzeit dynamisch erzeugt werden. Es ist auch denkbar, dass seine Bestandteile dynamisch erstellt werden. Aber alles, was zu einer Klasse gehört, sollte auch Teil dieser Klasse sein. Wenn das unbedingt dynamisch sein muss, dann packe es in das FormLoad-Ereignis oder in eine öffentliche Init-Methode; stoße das von Form1 aus an, aber erledige es möglichst vollständig innerhalb des neuen Formulars.
Beispiel: Ein Auto-Transporter (ist also auch eine Ableitung der Klasse "Auto") transportiert mal VW, mal BMW. Soll der Transporter die Ausstattung der transportierten Autos bestimmen? Nein, das ist Sache der Klasse VW bzw. BMW. Der Transporter sagt also lediglich dem Hersteller: "Bereite die Autos zum Transport vor", sonst steuert er nichts.
Gruß und Frohe Weihnachten! Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!