Laden...

Windows CE 5.0: Dynamisches anwählen von PictureBox via Code und Zufallszahl

Erstellt von Coralino vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.254 Views
C
Coralino Themenstarter:in
21 Beiträge seit 2016
vor 7 Jahren
Windows CE 5.0: Dynamisches anwählen von PictureBox via Code und Zufallszahl

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;
D
261 Beiträge seit 2015
vor 7 Jahren

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; 
3.170 Beiträge seit 2006
vor 7 Jahren

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

C
Coralino Themenstarter:in
21 Beiträge seit 2016
vor 7 Jahren

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

D
261 Beiträge seit 2015
vor 7 Jahren

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;
}
C
Coralino Themenstarter:in
21 Beiträge seit 2016
vor 7 Jahren

Super - dies hat bestens funktioniert

Tausend Dank euch beiden

3.170 Beiträge seit 2006
vor 7 Jahren

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

5.299 Beiträge seit 2008
vor 7 Jahren

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.