将函数添加到按钮阵列中的一个按钮
问题描述:
我想通过代码在C#中制作一个计算器(只需在设计器中添加一个组框和一个标签)。 我已成功添加按钮昏迷和+/-符号。 但现在我遇到了一个问题。将函数添加到按钮阵列中的一个按钮
我可以为它们分配一个功能,但是 我需要分别为其中一个按钮分配一个功能。
到目前为止,我还用一个按钮尝试这样做:
double num = Convert.ToDouble(Answer.Text);
Answer.Text = (-num).ToString();
但由于我使用数组我不知道我怎么可以从另一个分开一个按钮。
本质上我应该能够做到这一点: 如果(数字[10] .IsPressed) 做到这一点。 但同样,我不知道syntaxe的不够好
答
我真的不知道你想做的事......但是你可以尝试一个“大”事件处理......例如:
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...
}
}
答
另一个好方法是为每个按钮设置自己的处理程序。当您双击设计器中的按钮时,Usualy Visual Studio将生成自己的点击处理程序。
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将自动添加生成的事件处理程序的按钮)
this.ButtonPlus.Click += ButtonPlus_Click;
this.ButtonMinus.Click += ButtonMinus_Click;
随着方法上面您将拥有自己的每项操作功能,这可以帮助您轻松/快速地维护您的代码。
但是,如果您只想为所有按钮使用一个事件处理程序,则可以使用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();
}
你仍会有分离方法每一个操作,但只有一个事件处理程序,所有按钮