2016-05-20 4 views
0

デリゲートを使用して異なる計算結果(+、 - 、/、%など)を表示するWPFアプリケーションを作成しました。パブリックデリゲート 無効計算(、int型bをint型)。 問題は、私のプログラムだけでこれらの計算の最後の結果を示しているようだが、私はリストボックスにそれらすべてを表示する必要があるということです。デリゲート計算で1つではなく、すべての結果を表示する方法

これは私のコードの権利であります今:

:計算のいずれかの

public partial class MainWindow : Window 
{ 
     public delegate string CalculateHandler(int a, int b); 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void BtnCalculate_Click(object sender, RoutedEventArgs e) { 

     CalculateHandler Calculate = new CalculateHandler(Add.Addition); 
     Calculate += Subtract.Subtraction; 
     Calculate += Multi.Multiplication; 
     Calculate += Div.Division; 
     Calculate += Root.Ro; 
     Calculate += Mod.Modulo; 
     Calculate += Pot.Potency; 

     int a = Int32.Parse(TextBoxZahlA.Text); 
     int b = Int32.Parse(TextBoxZahlB.Text); 

     listBox.Items.Add(Calculate(a, b)); 
     listBox.Items.Refresh(); 
    } 
} 

class Multi 
{ 
    public static string Multiplication (int a, int b) 
     { 
      string result3 = a + " * " + b + " = " + (a * b); 
      return result3; 
     } 
    } 
} 

ありがとうございました!

答えて

1

私は良い方法は、計算ごとにハンドラを保持するリストを作成することだと思います。その後、for-eachループを使用して値を計算し、listBoxに追加します。このよう

  List<CalculateHandler> CalculateHandlers = new List<CalculateHandler>(); 
      CalculateHandlers.Add(Add.Addition); 
      CalculateHandlers.Add(Subtract.Subtraction); 
      CalculateHandlers.Add(Multi.Multiplication); 
      .... 

      int a = Int32.Parse(textBox.Text); 
      int b = Int32.Parse(textBox_Copy.Text); 

      foreach (var handler in CalculateHandlers) 
      { 
       listBox.Items.Add(handler(a, b)); 
      } 

      listBox.Items.Refresh(); 
1

Calculate(a, b)を呼び出すと、すべての代理人が実行されますが、最後の代理人だけが戻り値として返されます。 1つの解決策は、デリゲートの配列を使用してそれを繰り返したり、各デリゲートにlistBox.Itemsを追加させることです(重複した作業では推奨しませんが)。

関連する問題