Image.Tag 的图片框在 if 语句中不起作用
Image.Tag of picture Box not working in if statement
我正在制作一个记忆游戏,将两张牌与它们自己进行比较,看它们是否相同。我通过比较图片框中图像的标签来做到这一点。所有图像都有唯一的标签,但是,当在 if 语句中进行比较时,它会忽略并将其视为 false。这是单击卡片时的代码。
private void pictureBox1_Click(object sender, EventArgs e)
{
Image temp = Boxes[0];
pictureBox1.Tag = Boxes[0].Tag;
pictureBox1.Image = temp;
if (openBox1 == null)
{
openBox1 = pictureBox1;
}
else if (openBox1 != null && openBox2 == null)
{
openBox2 = pictureBox1;
}
if (openBox1 != null && openBox2 != null)
{
if (openBox1.Image.Tag == openBox2.Image.Tag)
{
openBox1 = null;
openBox2 = null;
}
else
{
openBox1.Image = Properties.Resources.card;
openBox2.Image = Properties.Resources.card;
openBox1 = null;
openBox2 = null;
}
}
}
这就是我标记图像的方式:
List<int> Repeats = new List<int>();
int random;
bool test;
foreach (Image n in Album)//checks to see if image has been added
{
test = true;
while (test)
{
random = randy.Next(0, 16);
if (!Repeats.Contains(random))
{
Boxes[random] = n;
Boxes[random].Tag = n.Width * n.Height;
Repeats.Add(random);
test = false;
}
}
}
我自己已经进入了程序,监控了变量。当我点击两张同一张卡片时,它只是忽略了它们是相同的值。
该代码无效,因为装箱。 int
是一个值类型,将其转换为 object
(Tag
接受的类型).net 用新的 object
('boxes' 包装值类型它)。由于 object
是引用类型,每个标签都有不同的对象,因此不满足等式。
要使其正常工作,您必须通过类型转换或使用运算符 as
:
对值进行拆箱
//Unbox values before comparing
if (openBox1.Image.Tag as integer == openBox2.Image.Tag as integer)
//...
我正在制作一个记忆游戏,将两张牌与它们自己进行比较,看它们是否相同。我通过比较图片框中图像的标签来做到这一点。所有图像都有唯一的标签,但是,当在 if 语句中进行比较时,它会忽略并将其视为 false。这是单击卡片时的代码。
private void pictureBox1_Click(object sender, EventArgs e)
{
Image temp = Boxes[0];
pictureBox1.Tag = Boxes[0].Tag;
pictureBox1.Image = temp;
if (openBox1 == null)
{
openBox1 = pictureBox1;
}
else if (openBox1 != null && openBox2 == null)
{
openBox2 = pictureBox1;
}
if (openBox1 != null && openBox2 != null)
{
if (openBox1.Image.Tag == openBox2.Image.Tag)
{
openBox1 = null;
openBox2 = null;
}
else
{
openBox1.Image = Properties.Resources.card;
openBox2.Image = Properties.Resources.card;
openBox1 = null;
openBox2 = null;
}
}
}
这就是我标记图像的方式:
List<int> Repeats = new List<int>();
int random;
bool test;
foreach (Image n in Album)//checks to see if image has been added
{
test = true;
while (test)
{
random = randy.Next(0, 16);
if (!Repeats.Contains(random))
{
Boxes[random] = n;
Boxes[random].Tag = n.Width * n.Height;
Repeats.Add(random);
test = false;
}
}
}
我自己已经进入了程序,监控了变量。当我点击两张同一张卡片时,它只是忽略了它们是相同的值。
该代码无效,因为装箱。 int
是一个值类型,将其转换为 object
(Tag
接受的类型).net 用新的 object
('boxes' 包装值类型它)。由于 object
是引用类型,每个标签都有不同的对象,因此不满足等式。
要使其正常工作,您必须通过类型转换或使用运算符 as
:
//Unbox values before comparing
if (openBox1.Image.Tag as integer == openBox2.Image.Tag as integer)
//...