Problem mit Zugriff auf Picturebox
-
Hi zusammen!
Folgendes Problem bereitet mir Kopfzerbrechen: Ich habe 20 PictureBoxes. Nun möchte ich dynamisch Zugriff auf diese, um in einer For-Schleife alle Image-Eigenschaften zu verändern. Allerdings spielt da C# nicht mit. Folgende Herangehensweise habe ich:
//Entweder so: Control[] c = new Control[0]; c = Controls.Find("pictureBox" + id.ToString(), true); c[0].Image = Image.FromFile("bliblablup.jpg"); //Oder so: int num = Controls.IndexOfKey("pictureBox" + id.ToString()); Controls[num].Image = Image.FromFile("bliblablup.jpg");
Natürlich müsste dieser Ablauf dann in einer Schleife durchlaufen werden, damit alle 20 PictureBoxes angesprochen werden. Allerdings meckert der Compiler, dass es die Eigenschaft .Image in beiden Fällen nicht gibt. IntelliSense zeigt mir die meisten (alle?) sonstige Eigenschaften an (bspw. Name, Height, ...) aber Image und ImageUrl zeigt er nicht.
Das Control zu einer PictureBox casten geht natürlich auch nicht.
Könnt ihr mir helfen? Ich bin echt am verzweifeln
Wie komme ich dynamisch (nicht per pictureBox1.Image, pictureBox2.Image, ...) an die Image-Eigenschaft der PictureBoxen?
Viele Grüße und schon mal ein Danke Schön im voraus,
Lukas
-
Du suchst eine PictureBox.
c[0] ist aber ein Control und keine Picturebox.PictureBox ist überigens eine Klasse und die lässt sich auch erstellen.
-
Hallo!
Danke für die schnelle Antwort
Du suchst eine PictureBox.
c[0] ist aber ein Control und keine Picturebox.Habe ich denn die Möglichkeit direkt nach einer PictureBox zu suchen? Eine PictureBox ist doch auch ein Control. Kann ich das irgendwie casten? Oder gibt es keine Möglichkeit eine PictureBox zu finden?
PictureBox ist überigens eine Klasse und die lässt sich auch erstellen.
Ist das denn nicht umständlich 20 PictureBox-Klassen zu erstellen, wenn das auch das Studio für mich übernehmen kann?
Viele Grüße und vielen Dank,
Lukas
-
Schau Dir mal die Schlüsselwörter "is" und "as" von C# an.
Ansonsten liefert Controls einen Indexer, der auch den Namen der Picturebox erlaubt. (Dann kannst Du den aber auch direkt verwenden.)
-
Hi zusammen!
Wunderbar! Vielen Dank für eure Hilfe! Jetzt funktioniert es wunderbar!
Für alle die ähnliche Probleme haben, hier mein Code:
for (int i = 1; i <= Controls.Count; i++) { /* Erste Möglichkeit *********************/ int key = Controls.IndexOfKey("pictureBox" + i.ToString()); PictureBox pb = Controls[key] as PictureBox; pb.Image = Image.FromFile("C:\\turned.jpg"); /* Zweite Möglichkeit * ******************/ /* if (Controls[i] is PictureBox) { PictureBox pb = Controls[i] as PictureBox; pb.Image = Image.FromFile("C:\\turned.jpg"); }*/ }
Vielen Dank nochmal für die schnelle und kompetente Hilfe!!!
-
PictureBox pb = Controls[key] as PictureBox; pb.Image = Image.FromFile("C:\\turned.jpg");
Das führt zu nem Programmabsturz wenn Controls[key] keine Picturebox ist weil pb dann null ist. (das ergebnis von "as" ist null wenn das object nicht vom erforderten Type ist.)