C# 如何将多个按钮编码为一个方法?
我正试图用C语言为游戏策划人修改一个电脑程序。现在,按钮有很多不必要的代码。我知道我可以把它们都放在一个方法中,但我不知道怎么做。下面是一些代码。请帮忙C# 如何将多个按钮编码为一个方法?,c#,winforms,C#,Winforms,我正试图用C语言为游戏策划人修改一个电脑程序。现在,按钮有很多不必要的代码。我知道我可以把它们都放在一个方法中,但我不知道怎么做。下面是一些代码。请帮忙 private void button1_Click(object sender, EventArgs e) { this.ActiveControl.BackColor = controlColor; this.ActiveControl.Text = controlNumber
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();
您只需将相同的单击事件回调函数与每个按钮的单击事件关联即可。您可以通过代码或通过“属性”窗格执行此操作。只需选择每个按钮,然后为每个按钮选择相同的事件处理程序
在您的情况下,如果希望每个按钮都使用button1_Click事件,则将该button1_Click事件与每个按钮关联。如果这样做,您可能希望将事件回调函数重命名为更通用的函数。您只需将相同的单击事件回调函数与每个按钮的单击事件关联即可。您可以通过代码或通过“属性”窗格执行此操作。只需选择每个按钮,然后为每个按钮选择相同的事件处理程序
在您的情况下,如果希望每个按钮都使用button1_Click事件,则将该button1_Click事件与每个按钮关联。如果这样做,您可能希望将事件回调函数重命名为更通用的函数。如果您所说的是所有按钮执行基本相同的代码,但它被复制了多次,然后,您可以查看每个按钮的单击事件连接到其每个事件处理程序的位置,并将它们全部指向相同的方法 在某个地方(可能在您的
文件名.Designer.cs
中),您有如下内容:
button1.Click += new EventHandler(button1_click);
private void button_Click(object sender, EventArgs e)
{
// stuff that happens when a button is clicked
}
要更改此设置,您可以将每个设置如下(请注意,此设置不需要放入Designer.cs文件中,并且不建议手动编辑此文件):
其中定义的方法如下:
button1.Click += new EventHandler(button1_click);
private void button_Click(object sender, EventArgs e)
{
// stuff that happens when a button is clicked
}
这将使所有按钮使用相同的按钮单击事件处理程序。如果需要知道哪个按钮触发了事件,可以检查发件人的id:
Button buttonThatClicked = sender as Button;
if (buttonThatClicked != null)
{
// do whatever you need to, based on the button's properties
}
如果您所说的是所有按钮执行基本相同的代码,但它被复制了多次,那么您可以查看每个按钮的单击事件连接到其每个事件处理程序的位置,并将它们全部指向相同的方法 在某个地方(可能在您的
文件名.Designer.cs
中),您有如下内容:
button1.Click += new EventHandler(button1_click);
private void button_Click(object sender, EventArgs e)
{
// stuff that happens when a button is clicked
}
要更改此设置,您可以将每个设置如下(请注意,此设置不需要放入Designer.cs文件中,并且不建议手动编辑此文件):
其中定义的方法如下:
button1.Click += new EventHandler(button1_click);
private void button_Click(object sender, EventArgs e)
{
// stuff that happens when a button is clicked
}
这将使所有按钮使用相同的按钮单击事件处理程序。如果需要知道哪个按钮触发了事件,可以检查发件人的id:
Button buttonThatClicked = sender as Button;
if (buttonThatClicked != null)
{
// do whatever you need to, based on the button's properties
}
如果在几个按钮单击方法中有重复的代码,只需创建一个单独的方法,并让按钮单击方法调用它
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;
.....
}
如果在几个按钮单击方法中有重复的代码,只需创建一个单独的方法,并让按钮单击方法调用它
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;
.....
}
对不起,我不明白你想做什么。你能更详细地解释一下吗?我想他想重构他的代码。我还有23个按钮看起来像这样。我如何编写一个方法来调用每个按钮,从而使代码更小?对不起,我不明白您想要做什么。你能更详细地解释一下吗?我想他想重构他的代码。我还有23个按钮看起来像这样。如何编写一个方法来调用每个按钮,使代码更小?如果在filename.Designer.cs文件中进行更改,它将位于“Windows窗体设计器生成的代码”区域中。我不知道,但如果您通过designer gui对表单执行操作(如添加/删除事件),则设计器可能会丢失或修改任何“手动”添加的代码。话虽如此,手动分配EventHandler的代码没有理由不能添加到Form1.cs文件(或任何形式文件的名称)。@wageoghe:这是正确的,但事件连接也可以从设计器(从属性窗格)修改,因此事件连接更改不应丢失。然而,您是对的,通常应该避免在设计器代码中乱搞,尤其是在不必要的情况下。我相应地编辑了我的文章。如果您在filename.Designer.cs文件内进行更改,它将位于“Windows窗体设计器生成的代码”区域内。我不知道,但如果您通过designer gui对表单执行操作(如添加/删除事件),则设计器可能会丢失或修改任何“手动”添加的代码。话虽如此,手动分配EventHandler的代码没有理由不能添加到Form1.cs文件(或任何形式文件的名称)。@wageoghe:这是正确的,但事件连接也可以从设计器(从属性窗格)修改,因此事件连接更改不应丢失。然而,您是对的,通常应该避免在设计器代码中乱搞,尤其是在不必要的情况下。我相应地编辑了我的帖子。button1.Click+=neweventhandler(button1\u Click);button2.Click+=新建事件处理程序(button2\u Click);checkButton.单击+=新建事件处理程序(checkGuess);button1.Click+=新建事件处理程序(button1\u Click);button2.Click+=新建事件处理程序(button2\u Click);checkButton.单击+=新建事件处理程序(checkGuess);