Entwickler-Ecke
WinForms - Auf ein zur Laufzeit erstelltes Control zugreifen
Nico93 - Di 11.10.11 14:53
Titel: Auf ein zur Laufzeit erstelltes Control zugreifen
Hallo zusammen,
bin noch Einsteiger in Sachen C# und habe daher leider noch nicht so die Erfahrung.
Auch nach langem Suchen habe ich leider keine Antwort auf meine Frage gefunden.
Nun zum Problem:
Ich erstelle zur Laufzeit ein einfaches Label mit folgendem Code:
C#-Quelltext
1: 2: 3: 4: 5:
| Label faktor = new Label(); faktor.Top = 65; faktor.Left = 125; faktor.Text = ""; faktor.Width = 10; |
außerdem wird noch ein button erstellt, welcher ein Click-Event hat, wodurch der Text des Labels "faktor" editiert werden soll.
Das Event sieht wie folgt aus:
C#-Quelltext
1: 2: 3: 4:
| private void ButtonClick(object sender, System.EventArgs e) { faktor.Text = "test"; } |
Leider bekomme ich hier immer die Meldung "Der Name "faktor" ist im aktuellen Kontext nicht enthalten".
Wenn ich jedoch mit diesem Event auf ein Control zugreifen möchte, welches ich im Designer hinzugefügt habe, funktioniert das.
Vielen Dank für die Hilfe.
Moderiert von
Th69: Quote- durch C#-Tags ersetzt
dark-destination1988 - Di 11.10.11 15:01
moin
also du musst das control auch zu deiner form hinzufügen. (ich glaube mit controls.Add(deinElement))
das element was du erstellst wird beim verlassen der funktion vom garbage collector gelöscht.
Nico93 - Di 11.10.11 15:03
achso ja hatte ganz vergessen die Zeile mit zu kopieren und hier einzufügen.
Natürlich wird das Element dem Form hinzugefügt.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| Label faktor = new Label(); faktor.Top = 65; faktor.Left = 125; faktor.Text = ""; faktor.Width = 10; this.Controls.Add(faktor); |
Moderiert von
Th69: Quote- durch C#-Tags ersetzt
Th69 - Di 11.10.11 15:08
Hallo und :welcome:
die vom Designer erstellten Controls werden als Klassenmember angelegt, während du bisher nur eine lokale Variable erstellt hast (und daher keinen Zugriff mehr von anderen Methoden aus hast).
Mache also aus der lokalen Variable auch eine Membervariable, d.h.
C#-Quelltext
1:
| private Label faktor = new Label(); |
Als Anfänger würde es aber auch reichen, das Control im Designer zu erstellen und z.B. mittels der Eigenschaft 'Visible' anzuzeigen bzw. zu verstecken.
Wenn du jedoch mehrere Controls dynamisch erstellst, dann solltest du diese in eine List<T> packen (falls dir das noch nichts sagt, dann wirst du sicherlich im Laufe deiner Weiterentwicklung mit C# darauf stoßen).
Nico93 - Di 11.10.11 15:14
ok super hat funktioniert.
Vielen Dank für die Hilfe!
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!