C# String in Variablennamen konvertieren

(Firma: Angestellter/Freelancer) #2635722
Lesenswert?

Hallo,


mein Ziel ist es eine große Anzahl von PictureBox'en zur Laufzeit zu 
erstellen.
Sie sollen fortlaufend z.B. PicBox_1 und Pic_Box_2 ...usw. ... heißen.
1
PictureBox PicBox_1 = new PictureBox();
2
PicBox_1.Size = new System.Drawing.Size(10, 10);
3
PicBox_1.Location = new System.Drawing.Point(50, 50);
4
...
5
Controls.Add(PicBox_1);

Diesen Code möchte ich nun etwa so umsetzen:
1
for(int i=0;i<=100;i++)
2
{
3
  PictureBox PicBox_[i] = new PictureBox();
4
  PicBox_[i].Size = new System.Drawing.Size(10, 10);
5
 ...
6
  Controls.Add(PicBox_[i]);
7
}

Das geht aber nicht!
Also suche ich nach so einer Lösung:
1
String[] XXX = new String[99];
2

3
for(int i=0;i<=100;i++)
4
{
5
  PictureBox Convert.StringToVariablename( XXX[i] ) = new PictureBox();
6
 ...
7
}

Kann man aus einem String einen Variablennamen erzeugen ???
Gast #2635837
Lesenswert?

Marvin C. schrieb:
> Aber gibt es prinzipiell eine Möglichkeit einen Variablennamen aus einem
> String zu erzeugen?

Nein, weil es garkeine Variablennamen zur Laufzeit gibt. Der Compiler 
macht grob gesprochen aus dem Namen eine Adresse und vergisst ihn dann. 
Daher kannst du beim Debuggen auch nur über Variablennamen zugreifen, 
wenn dieser Bezug extra gespeichert wurde, indem du zum Compilieren 
"Include Debug Info" oder so ähnlich anklickst, sonst sind in der 
ausführbaren Datei keine Infos darüber mehr vorhanden.

Für fast alle Programmiersprachen gilt, dass das fertige Programm nur 
Adressen kennt, keine Namen. Ausnahme wäre z.B. Lisp. In Lisp ginge das 
was du wolltest.

Gruss Reinhard
Gast #2635855
Lesenswert?

Reinhard Kern schrieb:
> Nein, weil es garkeine Variablennamen zur Laufzeit gibt. Der Compiler
> macht grob gesprochen aus dem Namen eine Adresse und vergisst ihn dann.

das mag bei C oder C++ stimmen, aber nicht bei C# - da gibt es 
reflextion, damit kann man soetwas auch zur laufzeit machen.

Aber hier ist es nicht notwenig, ein Array reicht hier vollkommen aus.





List<PictureBox> ListBox = new List<PictureBox>();

for( int i=0; i<= 100; ++i ) {
   PictureBox PicBox_1 = new PictureBox();
   PicBox_1.Size = new System.Drawing.Size(10, 10);
   PicBox_1.Location = new System.Drawing.Point(50, 50);
   Controls.Add(PicBox_1);
   ListBox.Add(  PicBox_1 );
}

for( int i=0; i<= 100; ++i ) {
   ListBox[i].Image = "xyz.png";
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren