2017-10-05 140 views
1

我想通过代码在C#中制作一个计算器(只需在设计器中添加一个组框和一个标签)。 我已成功添加按钮昏迷和+/-符号。 但现在我遇到了一个问题。将函数添加到按钮阵列中的一个按钮

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

到目前为止,我还用一个按钮尝试这样做:

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

但由于我使用数组我不知道我怎么可以从另一个分开一个按钮。

本质上我应该能够做到这一点: 如果(数字[10] .IsPressed) 做到这一点。 但同样,我不知道syntaxe的不够好

回答

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

你仍会有分离方法每一个操作,但只有一个事件处理程序,所有按钮