C# 向按钮数组中的一个按钮添加函数
我正试图通过代码(只在designer中添加一个groupBox和一个标签)用C#制作一个计算器。 我成功地添加了昏迷和+/-符号。 但现在我遇到了一个问题 我可以为它们分配一个函数,但是 我需要为其中一个按钮分别分配一个功能 到目前为止,我只按了一个按钮:C# 向按钮数组中的一个按钮添加函数,c#,arrays,winforms,C#,Arrays,Winforms,我正试图通过代码(只在designer中添加一个groupBox和一个标签)用C#制作一个计算器。 我成功地添加了昏迷和+/-符号。 但现在我遇到了一个问题 我可以为它们分配一个函数,但是 我需要为其中一个按钮分别分配一个功能 到目前为止,我只按了一个按钮: double num = Convert.ToDouble(Answer.Text); Answer.Text = (-num).ToString(); 但是由于我使用数组,我不知道如何将一个按钮与另一个按钮分开
double num = Convert.ToDouble(Answer.Text);
Answer.Text = (-num).ToString();
但是由于我使用数组,我不知道如何将一个按钮与另一个按钮分开
基本上,我应该能够做到这一点:
如果(数字[10]。已压缩)
这样做。
但是我还是不知道语法是否足够好我真的不知道你想做什么。。。但您可以尝试一个“大”事件处理程序。。。例如:
Button[] buttons;
foreach(var button in buttons)
{
button.Click += MyHandler;
}
// method1
private void MyHandler(object sender, EventArgs e)
{
if(sender == buttons[0])
// Do something...
else if(sender == buttons[1])
// do something else...
else if(sender == buttons[2])
// and so on...
}
// method2
private void MyHandler(object sender, EventArgs e)
{
var button = (Button)sender;
switch(button.Text)
{
case "+":
case "1":
case "2":
// and so on...
}
}
另一个好方法是为每个按钮都有自己的处理程序。通常,在设计器中双击按钮时,VisualStudio将生成自己的单击处理程序
private void ButtonPlus_Click(object sender, EventArgs e)
{
// Do something when "+" pressed
}
private void ButtonMinus_Click(object sender, EventArgs e)
{
// Do something when "-" pressed
}
您可以手动将事件处理程序添加到构造函数中的按钮(如果使用Visual Studio生成它,Visual Studio将自动将生成的事件处理程序添加到按钮)
使用上述方法,您将为每个操作提供自己的函数,这有助于轻松/更快地维护代码库
但是,如果希望对所有按钮仅使用一个事件处理程序,则可以使用Button.Tag
属性
为您拥有的每个操作创建方法
private void ExecutePlus()
{
// Do something when "+" pressed
}
private void ExecuteMinus()
{
// Do something when "+" pressed
}
然后在构造函数中保存相应按钮的.Tag
属性中的所有操作
this.ButtonPlus.Tag = ExecutePlus;
this.ButtonMinus.Tag = ExecuteMinus;
// add "general" event handler
var buttons = new[] { this.ButtonPlus, this.ButtonMinus };
foreach(var button in buttons)
{
button.Click += Button_Click;
}
然后创建“常规”单击处理程序
private void Button_Click(object sender, EventArgs e)
{
var button = (Button)sender;
Action execute = (Action)button.Tag;
execute();
}
对于每个操作,仍然有单独的方法,但对于所有按钮,只有一个事件处理程序
private void Button_Click(object sender, EventArgs e)
{
var button = (Button)sender;
Action execute = (Action)button.Tag;
execute();
}