1Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
1066
1066
EMPFEHLEN
-
22.10.09 21:53 #1
Hallo Leute,
hab folgendes Problem. Habe mehrer pictureBoxes in einem Panel.
pictureBox1, pictureBox2, pictureBox3, ...
Kann man diese Control-Namen (Bezeichner) auch dynamisch zusammenbauen, um darauf zuzugreifen.
Wie ordne ich z.B. bei 100 Bildboxen das gleiche Bild zu, ohne im Code 100-Mal
Code :1 2 3 4 5 6 7
pictureBox[COLOR="Orange"]1[/COLOR].Image = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(sFilePath); pictureBox[COLOR="Orange"]2[/COLOR].Image = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(sFilePath); pictureBox[COLOR="Orange"]3[/COLOR].Image = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(sFilePath); ... ... pictureBox[COLOR="Orange"]<n-1>[/COLOR].Image = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(sFilePath); pictureBox[COLOR="Orange"]<n>[/COLOR].Image = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(sFilePath);
die selbe Zuordnung schreiben zu müssen?!
Geht doch bestimmt eleganter mit ner For-Schleife oder so!?
Ich komm nicht drauf!
Freu mich über Eure Hilfe
-
Ich weis nicht ob es auch eleganter geht:
Code :1 2 3 4 5 6 7 8 9
foreach (Control c in panel1.Controls) { try { ((PictureBox)c).Image = Image.FromFile("c:\\a.jpg"); } catch (Exception ex) { } }
-
22.10.09 22:57 #3
Hey CPoly,
Danke. Das ging ja schnell!!
Funktioniert astrein. Kurz und bündig, somit mehr als elegant!
Hier der Beweis im Bild als Anhang.
Großes MERCI!!
-
Ich muss nochmal antworten, weil mir eben aufgefallen ist, dass es wesentlich eleganter funktioniert, ohne dass man ständig in eine Exception rennt, die man dann abfängt.
Code :1 2 3 4 5
foreach (Control c in panel1.Controls) { if(c is PictureBox) ((PictureBox)c).Image = Image.FromFile("c:\\a.jpg"); }
-
29.06.10 12:20 #5
Hat alles wunderbar funktioniert.
Nun hab ich noch ein kleines Problemchen, in der Hoffnung, dass ihr mir helfen könnt?!
Hab z.B. nun 49 Pictureboxen denen ich je nach Lottoergebnis neue Bilder zuordnen möchte.
Z.B. kann man auch dynamisch den Picturebox-Namen "zusammenbauen" und dann dieser PB ein neues Bild zuweisen!?
Anders erklärt möchte ich den Index im PictureBox-Namen dynamisch bestimmen und dann ein Bild genau der Box zuweisen, die diesen Index im Namen beinhaltet.
In etwa so (schematisch) für "pictureBox27.Image":
Code :1 2
int i = 27; [COLOR="DarkRed"]"pictureBox2"[/COLOR]+i.ToString().[COLOR="MediumTurquoise"]Image[/COLOR]() .... = [COLOR="MediumTurquoise"]Image[/COLOR].FromFile(...
Nicht lachen, sieht jetzt vielleicht blöd aus, aber ich hoffe ich konnte es so am anschaulichsten vermitteln!
Wisst ihr ne elegente Lösung?Geändert von Don Philippo (29.06.10 um 12:23 Uhr)
-
29.06.10 12:40 #6
- Registriert seit
- Oct 2007
- Beiträge
- 325
Das geht über die Eigenschaft "Controls" der System.Windows.Forms-Klasse.
Etwa so:
Code csharp:1 2
int i = 27; (PictureBox)(this.Controls["pictureBox2"+i.ToString()]).Image = Image.FromFile(...
Geändert von Masterclavat (29.06.10 um 12:45 Uhr)
-
29.06.10 19:16 #7
Merci für die schnelle Antwort.
Genauso brauch ich's!
Leider funktioniert das noch nicht so. Bekomm ecklige Compiler-Fehler.
Bei folgendem Code kennt er die Definition "Image" nicht ... erst, wenn ich die Klammern (rot) drumrummsetz compiliert das System
Code :1 2 3 4 5
... [B][COLOR="Red"]([/COLOR][/B](PictureBox)(this.Controls["pictureBox" + aiGen[iGenIdx].ToString()])[B][COLOR="Red"])[/COLOR][/B].Image = Image.FromFile(... ...
Dann bekomm ich jedoch während der Programmausführung Fehlermeldungen, die ich aber nicht nachvollziehen kann (siehe Bild im Anhang).
Freu mich auf antwort!
Danke!
-
Mein ehemaliger Informatikprofessor würde sich im Grab umdrehen, wenn er tot wäre und das lesen würde. Fast jede Vorlesung hat er auf uns eingeprügelt: "Nicht mehr als einen Seiteneffekt pro Anweisung verursachen, sonst verliert ihr die Übersicht!".
Genau das rate ich auch dir: Teil diese Monsteranweisung einfach mal schön Schritt für Schritt auf. Erstens weisst du dann, wo genau der Fehler liegt und zweitens kannst du prüfen, wie die einzelnen Werte bisher ausgewertet wurden und du kannst auch sicherstellen, dass die Auswertungsreihenfolge so ist, wie du es erwartest.
-
29.06.10 19:45 #9
Jepp! Danke!
Unser Prof sagte immer: "Manchmal hilft auch 'n Tritt in den Hintern!"
Danke! Hab's komplett zerlegt und einzeln "entkäfert".
Echt peinlich. Die pictureBoxen sind nicht Teil des Hauptframes, sprich "this", sondern befinden sich in einem Panel "panelLottoSheet".
Somit konnte nur NULL zurückgeben werden, weil das System die Bildboxen nicht gefunden hat!
Jetzt sieht's so aus, der Vollständigkeit halber:
Code :1
((PictureBox)([B][COLOR="Red"]panelLottoSheet[/COLOR][/B].Controls[sPbID])).Image = Image.FromFile(...
Tja ... bei 32°C sollte man was anderes machen, als programmieren!
Trotzdem nochmal DANKE für's PUSHEN!
Ähnliche Themen
-
dynamisch erstellte Tables werden nicht angezeigt
Von cimcime im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 17.02.08, 17:34 -
[VB.Net] Dynamisch erstellte Controls und der Zugriff darauf
Von Xervek im Forum .NET Windows FormsAntworten: 12Letzter Beitrag: 07.10.07, 09:25 -
Dynamisch erstellte Radio's funktionieren im IE nicht
Von luke_the_duke im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 12.10.06, 09:45 -
Dynamisch erstellte Controls ansprechen
Von nordkap im Forum .NET Windows FormsAntworten: 5Letzter Beitrag: 28.09.05, 20:57 -
Dynamisch erstellte Server-Controls
Von Calisto im Forum ASPAntworten: 1Letzter Beitrag: 09.03.02, 00:30





Zitieren

Login





