Hallo Zusammen
Ich benütze VisualStudio 2008, .net 3.5 für Windows ce 5.0
Ich habe 3 Picturebox (pb1, pb2, pb3)
nun möchte ich das bild von pbx ändern wobei x eine Zahl zwischen 1 - 3 ist
also statt
pb1.Image = Properties.Resources.Bild1;
möchte ich etwas in dieser Art:
Random rnd = new Random();
int BildNummer = rnd.Next(1, 3);
String BildBox = "pb" + BildNummer;
BildBox.Image = Properties.Resources.Bild1;
Füge deine PictureBoxen in ein Array/List ein und benutze deine Variable "BildNummer" bei der Auswahl für den Index.
PictureBoxes[BildNummer].Image = Properties.Resources.Bild1;
Hallo,
@dannoe, das hatte ich auch schon getippt, aber Du warst schneller.
Eigentlich ist das ein Spezialfall von [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls , da sind noch mehr Möglichkeiten aufgezeigt.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Dies würde folgendes bedeuten:
public void GardenGame(String StrEAN, int number2)
{
String[,] arrGarden = { { "pbSlot00", "0", "0" }, { "pbSlot01", "0", "0" }, { "pbSlot02", "0", "0" } };
Random rnd = new Random();
int BildNummer = rnd.Next(1, 3);
arrGarden[BildNummer,0].Image = Properties.Resources.i03;
}
jedoch ist dies ja ein String and dem ich Images-Properties zuweisen will....
bekomme die fehlermeldung "Error 1 'string' does not contain a definition for 'Image' and no extension method 'Image' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)
Du musst auch die Referenz der PictureBoxen in das Array einfügen und nicht den Namen deiner PixtureBoxen.
also:
public void GardenGame(String StrEAN, int number2)
{
PictureBox[] arrGarden = { pbSlot00, pbSlot01, pbSlot02 };
Random rnd = new Random();
int BildNummer = rnd.Next(1, 3);
arrGarden[BildNummer].Image = Properties.Resources.i03;
}
Hallo Coralino,
du solltest statt rnd.Next(1,3)
besser rnd.Next(0,3)
verwenden.
Die untere Grenze ist inklusive, die obere exklusive, deshalb wirst Du nie die 3 ziehen.
Willst Du auch nicht, weil Dein Array-Index nullbasiert ist, Dein Index also bei 3 Elementen von 0 bis 2 reicht.
Um also die richtigen 3 Zahlen für den Index zu bekomen, rnd.Next(0,3)
.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
zu bedenken ist auch, dass beim Abruf eines Bildes aus den Resourcen dieses wirklich neu erstellt wird, aus einem Stream. Ich weiß nicht genau, aber evtl. ist das sogar ein Dateizugriff.
Jedenfalls zweimal dieselbe BildResource abgerufen ergibt 2 verschiedene Bitmaps (die halt das gleiche anzeigen).
Das geht auch in Richtung Memory-Leak, denn die Bilder werden ja nicht korrekt wieder disposed.
Also überlegenswert wäre, die BildResourcen erstmal in ein klassenweiters Array zu lesen, und im weiteren das Resourcen-Management nichtmehr damit zu behelligen.
Der frühe Apfel fängt den Wurm.