Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向按钮数组中的一个按钮添加函数_C#_Arrays_Winforms - Fatal编程技术网

C# 向按钮数组中的一个按钮添加函数

C# 向按钮数组中的一个按钮添加函数,c#,arrays,winforms,C#,Arrays,Winforms,我正试图通过代码(只在designer中添加一个groupBox和一个标签)用C#制作一个计算器。 我成功地添加了昏迷和+/-符号。 但现在我遇到了一个问题 我可以为它们分配一个函数,但是 我需要为其中一个按钮分别分配一个功能 到目前为止,我只按了一个按钮: double num = Convert.ToDouble(Answer.Text); Answer.Text = (-num).ToString(); 但是由于我使用数组,我不知道如何将一个按钮与另一个按钮分开

我正试图通过代码(只在designer中添加一个groupBox和一个标签)用C#制作一个计算器。 我成功地添加了昏迷和+/-符号。 但现在我遇到了一个问题

我可以为它们分配一个函数,但是 我需要为其中一个按钮分别分配一个功能

到目前为止,我只按了一个按钮:

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