C# c“返回”不会终止按钮点击事件并触发计时器

C# c“返回”不会终止按钮点击事件并触发计时器,c#,timer,return,C#,Timer,Return,对不起,如果这个问题太简单了。我试图复制匹配游戏教程 但我使用名为cards的自定义按钮来显示图像。一张卡片有两个图像:背面和正面。所有卡片的背面都相同,正面是随机分配图片的图像。将image设置为back会隐藏随机图像,而front会显示随机图像。如果两个连续单击的图像具有相同类型的匹配,我希望单击事件在不触发计时器的情况下结束,但似乎计时器仍然被触发。下面是按钮单击事件中的代码。我尝试使用firstClicked.front而不是if中的firstClicked.Image,但似乎没有任何效

对不起,如果这个问题太简单了。我试图复制匹配游戏教程

但我使用名为cards的自定义按钮来显示图像。一张卡片有两个图像:背面和正面。所有卡片的背面都相同,正面是随机分配图片的图像。将image设置为back会隐藏随机图像,而front会显示随机图像。如果两个连续单击的图像具有相同类型的匹配,我希望单击事件在不触发计时器的情况下结束,但似乎计时器仍然被触发。下面是按钮单击事件中的代码。我尝试使用firstClicked.front而不是if中的firstClicked.Image,但似乎没有任何效果。谢谢

private void card_Click(object sender, EventArgs e)
    {
         if (timer1.Enabled == true)
            return;

        Card clickedCard = sender as Card;


        if (clickedCard != null) 
        {

            if (clickedCard.Image == clickedCard.front) //ingore Clicks on already revealed cared
                return;



            if (firstClicked == null)
            {
                firstClicked = clickedCard;
                firstClicked.Image = firstClicked.front;

                return;
            }
            //Clicked card is second card

            secondClicked = clickedCard;
            secondClicked.Image = secondClicked.front;



            if (firstClicked.Image == secondClicked.Image)
            {
                firstClicked = null;
                secondClicked = null;
                    return;
            }


            timer1.Start();

        }
 }
我的假设是clickedCard.Image的类型为System.Drawing.Image,在这种情况下,使用clickedCard.Image==clickedCard.front比较图像根本不起作用。这是因为该操作实际上不会比较图像的内容,而是比较表示图像的对象。在C语言中,有不同的方法来比较一个对象,你可以在这篇文章中读到更多关于这个对象的内容,这篇文章比你正在使用的教程更详细地解释了比较对象的内容

比较两幅图像实际上有点复杂,如果做得不正确,计算起来可能会很昂贵。这就是为什么匹配游戏教程比较字符串值而不是图像,因为它更容易计算,也更便宜。由于您对编程相当陌生,我可能会坚持教程的方法,直到您达到更高级的水平


编辑:我只是想澄清我最后一句话的意思。实验是一件好事,因为它是学习新事物的好方法。然而,在你试图解决这个问题之前,你可能需要学习一些中间步骤。

@Adrian。正如你所说,我意识到我是在比较物体,而不是图像。我将id包含到按钮中,以便两个具有相似图像的图像具有相同的id。然后,我没有比较图像,而是使用了id,这就解决了问题

调试代码。您是否输入了最后一个if?调试器在哪里说它失败了?首先不要使用==true或==false。你知道退货是怎么回事吗?它们退出所使用的方法。有效地阻止了该方法中在它们之后运行的所有内容。当前,如果启用了计时器1,则不会运行任何其他内容。@deathismyfriend:从不使用==true或==false?为什么不呢?这是一种时尚。有点多余也没什么错。它的顺序是用大括号括起一条语句。@JimMischel我想这是因为看到人们也写myBool!=错误的