2

我目前正在上 C# 的初学者课程。我们连续错过了两节课,因为老师不能在那里。所以我们并没有真正看到我们需要做什么。他说去 MSDN 上看看,但这对我来说通常太复杂了。所以这是我的问题:

我必须创建一个“Simon Says”程序。这是我当前的代码(对不起法语变量):

public partial class Form1 : Form
{
    const byte LIMITE = 255;
    const byte LIMITEBOUTON = 5;
    byte[] _abyBouton = new byte[LIMITE];
    Random _rand = new Random();


    public Form1()
    {
        InitializeComponent();
    }

    //Blinks the Button. Works correctly.
    void AnimerBouton(Button btnBouton, Color Cocoleur)
    {
        btnBouton.BackColor = Color.Black;
        btnBouton.ForeColor = Color.White;
        Update();
        System.Threading.Thread.Sleep(500); // C'est inscrit en miliseconde
        btnBouton.BackColor = Cocoleur;
        btnBouton.ForeColor = Color.Black;
        Update();
        System.Threading.Thread.Sleep(500); // C'est inscrit en miliseconde
    }

    private void btnDémarrer_Click(object sender, EventArgs e)
    {
        //Creates an array with the 255 eventual moves.
        for (byte byIndex = 0; byIndex <= LIMITE - 1; byIndex++)
        {
            _abyBouton[byIndex] = (byte)_rand.Next(1, LIMITEBOUTON);
        }

        for (byte byIndex = 0; byIndex <= LIMITE - 1; byIndex++)
        {
            //Takes care of the current progress in the game.
            for (byte byIndex2 = 0; byIndex2 <= byIndex; byIndex2++)
            {
                switch (_abyBouton[byIndex2])
                {
                    case 1:
                        {
                            AnimerBouton(btn1, Color.Green);
                        }
                        break;
                    case 2:
                        {
                            AnimerBouton(btn2, Color.Red);
                        }
                        break;
                    case 3:
                        {
                            AnimerBouton(btn3, Color.Yellow);
                        }
                        break;
                    case 4:
                        {
                            AnimerBouton(btn4, Color.Cyan);
                        }
                        break;
                }
                //Wait to see if the click is correct. No idea how to do this.
            }
        }  
    }
}

所以我必须等待用户点击一个按钮,看看它是否是正确的。我环顾四周,它正在谈论事件,但我无法理解我需要做什么。对于如何做到这一点,我将不胜感激。

谢谢!

4

2 回答 2

9

在设计器的属性窗口中,单击闪电图标。您将获得所选控件的事件列表。确保btnBouton选中该控件,然后在列表中找到该Click事件。您应该btnDemarrer_Click在下拉列表中看到。选择它。现在,当单击按钮时,它应该调用您的btnDemarrer_Click处理程序。

当您还没有编写处理程序时,您可以双击列表中的事件,它会自动为您生成方法骨架。您还可以双击控件本身以生成该控件的默认事件处理程序。(在按钮的情况下,我认为默认事件是点击事件。)

于 2013-01-03T21:29:19.127 回答
-2

如果您希望特定方法等到某些工作完成,您可以查看AutoResetEvent. 一个极其简化的示例可能会帮助您走上正轨:

using System.Threading;

public static AutoResetEvent arEvent = new AutoResetEvent(false);

static void Main()
{
    DoWork();
    arEvent.WaitOne();  //WaitOne() "pauses" Main and waits for some work to be done.
    DoWork();
    arEvent.WaitOne();
}

static void DoWork();
{
    //Some work is done here.
    arEvent.Set(); //This lets Main() continue where it left off.
}

使用它,您可以btnDémarrer_Click等待用户输入,然后在用户完成点击后继续。

于 2013-01-03T21:57:38.087 回答