我正在尝试使用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();
答案 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事件与每个按钮相关联。如果这样做,您可能希望将事件回调函数重命名为更通用的函数。