【问题标题】:c# "return" does not terminate the Button Clicked event and triggers Timerc#“return”不终止Button Clicked事件并触发Timer
【发布时间】:2014-10-09 15:34:36
【问题描述】:

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

http://msdn.microsoft.com/en-us/library/dd553234.aspx

但我使用自定义按钮(名为 Cards)来显示图像。一张卡片有两个图像(背面,正面)。所有卡片的背面都是相同的,“正面”是随机分配图片的图像。将图像设置为背面隐藏随机图像,正面显示它。如果两次连续单击具有相同类型的图像(匹配),我希望单击事件在不触发计时器的情况下结束,但似乎无论如何都会触发计时器。这是按钮单击事件中的代码。我尝试在 if() 中使用 firstClicked.front 而不是 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();

        }
 }

【问题讨论】:

  • 调试你的代码。你输入最后一个 if 吗?
  • 调试器在哪里说它失败了?
  • 首先不要使用 == true 或 == false。你也知道退货是如何运作的吗?他们退出他们所在的方法。有效地停止他们在该方法中运行的所有内容。当前,如果启用 timer1,则不会运行其他任何内容。
  • @deathismyfriend:“永远不要使用 == true 或 == false”?为什么不?这是一个风格的事情。一点冗余也没什么不好。使用大括号括住单个语句的顺序。
  • @JimMischel 我认为这是因为看到人们也写myBool != false

标签: c# timer return


【解决方案1】:

我的假设是clickedCard.ImageSystem.Drawing.Image 类型,在这种情况下,使用clickedCard.Image == clickedCard.front 比较图像根本行不通。这是因为此操作实际上不会比较图像的内容,而是比较代表它们的对象。在 C# 中,有多种比较对象的方法,您可以在此 article 中了解更多信息,它比您使用的教程更详细地解释了比较对象。

比较两个图像实际上有点复杂,如果操作不正确,计算起来实际上会很昂贵。这就是匹配游戏教程比较字符串值而不是图像的原因,因为它更容易计算且成本更低。由于您对编程很陌生,我可能会坚持使用教程的方法,直到您达到更高级的水平。

编辑:我只是想澄清我最后一句话的意思。实验是一件好事,因为它是学习新事物的好方法。但是,您尝试执行的操作可能需要在尝试解决问题之前学习一些中间步骤。

【讨论】:

    【解决方案2】:

    @阿德里安。正如你所说,我意识到我在比较对象而不是图像。我将 id 添加到按钮中,以便具有相似图像的两个图像具有相同的 id。然后我没有比较图像,而是使用了 id 并解决了它。

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2012-01-03
      • 1970-01-01
      • 2011-04-05
      • 2013-03-12
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多