我试图通过代码在C#中创建一个计算器(只需在设计器中添加一个groupBox和一个标签)。 我已成功添加按钮昏迷和+/-符号。 但现在我遇到了一个问题。
我可以为所有人分配一个功能但是 我需要将一个功能单独分配给其中一个按钮。
到目前为止,我只用一个按钮尝试了这个:
double num = Convert.ToDouble(Answer.Text);
Answer.Text = (-num).ToString();
但是因为我正在使用数组,所以我不知道如何将一个按钮与另一个按钮分开。
基本上我应该可以这样做: 如果(编号[10] .IsPressed) 做这个。 但我又不知道语法是否足够
答案 0 :(得分:2)
我真的不知道你想做什么...但是你可能会尝试一个大的'事件处理程序...例如:
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...
}
}
答案 1 :(得分:0)
另一个好方法是为每个按钮都有自己的处理程序。当您在设计器中双击按钮时,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();
}
对于每个操作,您仍然会有分离的方法,但是对于所有按钮只有一个事件处理程序