2017-10-05 141 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(); 
} 

你仍會有分離方法每一個操作,但只有一個事件處理程序,所有按鈕