C# Convert Object to bool

Betty

Stammuser
Hallo,
ich versuche ein Programm zu gestalten indem ich ein Bild das verpixelt ist aus 4 anderen Bilden zu erraten. Dafür habe ich in meinem Code diesen Abschnitt
Code:
 for(int i=0; i<4; i++)
            {
                if(pictureBoxs[i].Tag='1')
                    pictureBoxs[i].Image=

            }
.
Jedoch funktioniert das if nicht. Es wird rot unterstrichen und mir wurde gesagt ich soll den Objekt in ein bool konvertieren. Kann mir vieleicht jemand helfen?

Den Rest des Codes :D
Code:
 public partial class Form1 : Form
    {
        PictureBox[] pictureBoxs = new PictureBox[4];
        public Form1()
        {
            InitializeComponent();
            pictureBoxs[0] = pictureBox2; pictureBoxs[1] = pictureBox3; pictureBoxs[2] = pictureBox4;
            pictureBoxs[3] = pictureBox5;
        }

        Random r = new Random();
        Random p = new Random();
        List<Image> images = new List<Image>();
       
        private static Bitmap Pixelate(Bitmap image, Int32 blurSize)
        {
            return Functions.Pixelate(image, new Rectangle(0, 0, image.Width, image.Height), blurSize);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            int idx = r.Next(0, 7);
            pictureBox1.Image=Pixelate((Bitmap) Images[idx], 40);
            int idp = p.Next(0, 4);
            pictureBoxs[idp].Image = Images[idx];
            pictureBoxs[idp].Tag = 0;
            for(int i=0; i<4; i++)
            {
                if(pictureBoxs[i].Tag='1')
                    pictureBoxs[i].Image=

            }

            
        }

        private static Image[] Images
        {
            get
            {
                return new Image[]
                {
                    Properties.Resources.Bild_1,
                    Properties.Resources.Bild_2,
                    Properties.Resources.Bild_3,
                    Properties.Resources.Bild_4,
                    Properties.Resources.Bild_5,
                    Properties.Resources.Bild_6
                };
            }
        }

    }
 

Betty

Stammuser
Ich habe das Problem gelöst, habe jedoch ein anderes. Ich möchte gerne dass das Bild nicht 2 mal in den 4 PictureBoxes auftaucht. Habe diesen Code benutzt
Code:
int idx = r.Next(0, 7);
            pictureBox1.Image=Pixelate((Bitmap) Images[idx], 40);
            int idp = p.Next(0, 4);
            pictureBoxs[idp].Image = Images[idx];
            Images[idx].Tag = "Used";
            pictureBoxs[idp].Tag = null;
            for(int i=0; i<4; i++)
            { 
                if (pictureBoxs[i].Tag != null)
                {
                    int ind = r.Next(0, 7);
                    if (Images[ind].Tag != "Used")
                    {
                        pictureBoxs[i].Image = Images[ind];
                        Images[ind].Tag = "Used";
                        pictureBoxs[i].Tag = null;
                    }
           
                }
                    
            }
Trotzdem tauchen noch doppelt Bilder auf. Außerdem kann es manchmal passieren das gar keine Images in den PictureBoxes auftauchen. Liegt es am Program oder an Visual Studio?
 

Betty

Stammuser
Ich hab mit Breakpoint nachgeschaut was passiert und was ich gemerkt habe ist das der Tag immer null bleibt auch wenn ich es verändere. Wieso passiert das?
 

M@gic

Stammuser
Ich hab mit Breakpoint nachgeschaut was passiert und was ich gemerkt habe ist das der Tag immer null bleibt auch wenn ich es verändere. Wieso passiert das?

Weil du es so festgelegt hast?

pictureBoxs[idp].Tag = null; <- hier setzt du .Tag auf null
..
if (pictureBoxs.Tag != null) <- In der Schleife behandelst du alle Tags, welche nicht null sind (also keins)
{
...
 
Zuletzt bearbeitet:

Betty

Stammuser
Auch wenn ich was anderes hinschreibe wie zB in der for Schleife wo ich den Tag auf Used wechsel, bleibt es immer noch null.
 

GrafZahl

Member of Honour
Code:
...
Images[idx].Tag = "Used";   // <- das hier ist quark
                            // Images hast du definiert als einen statischen 
                            // getter der jeweils ein neues Array zurück gibt
                            //
                            // du wirst feststellen, dass wenn du 
                            // Images[idx].Tag direkt nach dieser zeile prüfst,
                            // da <null> steht, da der getter dir wieder ein 
                            // NEUES array liefert, und nicht das auf dessen 
                            // element du den Tag gesetzt hast
                            //
                            // abgesehen davon verwendest du dieses Tag 
                            // nirgendwo wieder

pictureBoxs[idp].Tag = null;// hier setzt du den Tag auf deiner picturebox auf 
                            // null...
                            // nur zur sicherheit: ALLE deine pictureboxes 
                            // starten mit Tag = null, und du setzt hier zum 
                            // ersten mal einen Tag... auf null ... somit sind 
                            // nach dieser zeile ALLE pictureboxes mit einem 
                            // null Tag versehen
for (int i = 0; i < 4; i++)
{ // hier gehst du nun sequentiell durch alle picture boxes
    if (pictureBoxs[i].Tag != null) // hier prüfst du ob das Tag der jeweiligen 
                                    // box nicht null ist
    {//alles innerhalb dieses blocks wird nie ausgeführt, da alle Tags null sind...
        int ind = r.Next(0, 7);
        if (Images[ind].Tag != "Used")
        {
            pictureBoxs[i].Image = Images[ind];
            Images[ind].Tag = "Used";
            pictureBoxs[i].Tag = null;
        }

    }

}
 

Betty

Stammuser
Danke. Jetzt weiß ich warum ich keinen Tag habe. Den Rest kann ich mir auch schon denken das nichts dabei rauskommt. Danke schön.
 
Oben