Forum: PC-Programmierung C# String in Variablennamen konvertieren


von Zero V. (Firma: Angestellter/Freelancer) (gnd)


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 ???

von Fabian (Gast)


Lesenswert?

Bin zwar selbst nur ein C# Einsteiger, aber ich denke, dass die 
Herangehensweise falsch ist. Ich würde das <list> Attribut hierfür 
verwenden. Also eine Liste von Pictureboxelementen.

von Fabian (Gast)


Lesenswert?

Alternativ, was spricht gegen ein Array aus Pictureboxen?

von Zero V. (Firma: Angestellter/Freelancer) (gnd)


Lesenswert?

Ja, genau das funktioniert!
Aber gibt es prinzipiell eine Möglichkeit einen Variablennamen aus einem 
String zu erzeugen?

von Fabian (Gast)


Lesenswert?

Ich hoffe nicht!

von Reinhard Kern (Gast)


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

von Peter II (Gast)


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";
}

von Farin (Gast)


Lesenswert?

Was du suchst ist die sogenannte Controls.Find()-Funktion. Mit der 
kannst du zur Laufzeit deine Controls, wenn du ihren Namen hast, 
ansprechen. Versuchs einfach mal aus. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.