Autor Beitrag
Nico93
Hält's aus hier
Beiträge: 8

WIN 2000, WIN XP, WIN Vista, WIN 7

BeitragVerfasst: Di 11.10.11 14:53 
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:
ausblenden 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:
ausblenden 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 user profile iconTh69: Quote- durch C#-Tags ersetzt
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8

WIN 2000, WIN XP, WIN Vista, WIN 7

BeitragVerfasst: 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.

ausblenden 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 user profile iconTh69: Quote- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
private Label faktor = new Label(); // bzw. = null					

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 Threadstarter
Hält's aus hier
Beiträge: 8

WIN 2000, WIN XP, WIN Vista, WIN 7

BeitragVerfasst: Di 11.10.11 15:14 
ok super hat funktioniert.
Vielen Dank für die Hilfe!