将功能添加到按钮数组中的一个按钮

时间:2017-10-05 16:31:30

标签: c# arrays winforms

我试图通过代码在C#中创建一个计算器(只需在设计器中添加一个groupBox和一个标签)。 我已成功添加按钮昏迷和+/-符号。 但现在我遇到了一个问题。

我可以为所有人分配一个功能但是 我需要将一个功能单独分配给其中一个按钮。

到目前为止,我只用一个按钮尝试了这个:

 double num = Convert.ToDouble(Answer.Text);
            Answer.Text = (-num).ToString();

但是因为我正在使用数组,所以我不知道如何将一个按钮与另一个按钮分开。

基本上我应该可以这样做: 如果(编号[10] .IsPressed)  做这个。 但我又不知道语法是否足够

2 个答案:

答案 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();
}   

对于每个操作,您仍然会有分离的方法,但是对于所有按钮只有一个事件处理程序