user3612213
user3612213

Reputation: 1

Detecting which image is used in an imagebox

I'm trying too make a memory game.
In this game when a button is klicked the button and an picturebox will be send into a List.
I want too use the images inside the pictureboxes as a way too use this code. But even when the two images are the same the code wont work. Is there a way too check the image used like Name.jpg.

if(buttonCount == 2)
{
    if(pictureList[0].Image == pictureList[1].Image)
    {
        buttonCount = 0;
        buttonList.RemoveAt(0)
        buttonList.RemoveAt(0);
        pictureList.RemoveAt(0);
        pictureList.RemoveAt(0);
    }
}

Upvotes: 0

Views: 45

Answers (2)

Kami
Kami

Reputation: 19407

In your current application, you do not have enough information associated with the image object to identify it. As such, you need to possibly extend the Image class to include this information or store it in some other way for comparison.

Extending Image class

public class GameImage : Image
{
    public static GameImage GetImage(string filename)
    {
        GameImage img = (GameImage)Image.FromFile(filename);
        img.FileName = filename;
        return img;
    }

    public string FileName { get; private set; }
}

Then the comparison becomes

if(buttonCount == 2)
{
    if(((GameImage)pictureList[0].Image).FileName == ((GameImage)pictureList[1].Image).FileName)
    {
        buttonCount = 0;
        buttonList.RemoveAt(0)
        buttonList.RemoveAt(0);
        pictureList.RemoveAt(0);
        pictureList.RemoveAt(0);
    }
}

Note: Note tested!

Upvotes: 0

Christoph Fink
Christoph Fink

Reputation: 23103

You could save an Id of the image (or e.g. the filename like you suggested) in the Tag.
So when loading the image into the picture box:

string path = "PATH";
pictureBox.Image = Image.FromFile(path);
pictureBox.Tag = path;

Then you could compare the Tag.

BUT I think (show us how you load the images please) this is not working as it is, because you load the image twice from the disk like:

pictureBox1.Image = Image.FromFile(path);
pictureBox2.Image = Image.FromFile(path);

Because then you have differen instances and so the equals returns false.
If you do it like the following it should also work:

var image = Image.FromFile(path);
pictureBox1.Image = image;
pictureBox2.Image = image;

Upvotes: 1

Related Questions