如何将多个按钮编码为一个方法?

时间:2010-12-15 19:44:41

标签: c# winforms

我正在尝试使用C#为游戏MasterMind修复计算机程序。现在,按钮有很多不必要的代码。我知道我可以将它们全部放入一种方法但我不知道如何。这是一些代码。请帮忙。

private void button1_Click(object sender, EventArgs e)
        {
            this.ActiveControl.BackColor = controlColor;
            this.ActiveControl.Text = controlNumber;
            allCellsClicked[0] = '1';
            if (all_Buttons_Clicked())
            {
                allCellsClicked[0] = '0';
                allCellsClicked[1] = '0';
                allCellsClicked[2] = '0';
                allCellsClicked[3] = '0';
                button04.Enabled = false;
                button03.Enabled = false;
                button02.Enabled = false;
                button01.Enabled = false;
                guess++;
                Label1.Text = "Guess Number " + Convert.ToString(guess);
                label4.Visible = true;
                label5.Visible = true;
                label4.Text = "0";
                label5.Text = "0";
int a = int.Parse(button01.Text), b = int.Parse(button02.Text), c = int.Parse(button03.Text), d = int.Parse(button04.Text);
int rightCol, rightPos;
                CheckAnswer(a, b, c, d, out rightPos, out rightCol);
                label4.Text = rightCol.ToString();
                label5.Text = rightPos.ToString();

3 个答案:

答案 0 :(得分:3)

如果您所说的是所有按钮执行的代码基本相同但是多次复制,那么您可以查看每个按钮的click事件被连接到每个事件处理程序和点的位置他们都采用相同的方法。

某处(可能在你的filename.Designer.cs中),你有类似的东西:

button1.Click += new EventHandler(button1_click);

要更改此设置,您可以将它们设置为这样(请注意,这不需要放在Designer.cs文件中,并且不建议手动编辑此文件):

button1.Click += new EventHandler(button_click);
button2.Click += new EventHandler(button_click);
button3.Click += new EventHandler(button_click);
button4.Click += new EventHandler(button_click);
...

你有一个像这样定义的方法:

private void button_Click(object sender, EventArgs e)
{
   // stuff that happens when a button is clicked
}

这将使所有按钮使用相同的button_click事件处理程序。如果您需要知道触发事件的按钮,您可以检查发件人的ID:

Button buttonThatClicked = sender as Button;
if (buttonThatClicked != null)
{
   // do whatever you need to, based on the button's properties
}

答案 1 :(得分:2)

如果你在几个button_click方法中有重复的代码,只需创建一个单独的方法并让button_click方法调用它。

private void button1_Click(object sender, EventArgs e)
        {
            this.ActiveControl.BackColor = controlColor;
            this.ActiveControl.Text = controlNumber;
            allCellsClicked[0] = '1';
            checkGuess();
        }

private void button2_Click(object sender, EventArgs e)
        {
            this.ActiveControl.BackColor = controlColor;
            this.ActiveControl.Text = controlNumber;
            allCellsClicked[0] = '2';
            checkGuess();
        }

private void checkGuess(){
       if (all_Buttons_Clicked())
            {
                allCellsClicked[0] = '0';
                allCellsClicked[1] = '0';
                allCellsClicked[2] = '0';
                allCellsClicked[3] = '0';
                button04.Enabled = false;
                button03.Enabled = false;
                button02.Enabled = false;
                .....
            }

答案 2 :(得分:0)

您可以将相同的Click事件回调函数与每个按钮的Click事件相关联。您可以通过代码执行此操作,也可以通过“属性”窗格执行此操作。只需选择每个按钮,然后为每个按钮选择相同的事件处理程序。

在您的情况下,如果您希望每个按钮都使用button1_Click事件,则将该button1_Click事件与每个按钮相关联。如果这样做,您可能希望将事件回调函数重命名为更通用的函数。