2012-03-25 6 views
1

私はこのプログラムを私が授業で取り組んでいますが、問題はif文にあると思います。私がプログラムを実行して、私の選択をしてトータルボタンをクリックすると、オーダーラベルの "あなたの前菜、お誘い、デザート用"の表示と、注文ラベルのステーキディナーの価格。私はswitch文を使わなければならないかもしれないと思っていますが、助けてくださったことはありません。出力ラベルには、表示したい部分だけが表示されます

namespace Restaurant 
{ 
    public partial class frmRestaurant : Form 
    { 
    decimal AppetizerPrice = 0.0m; 
    decimal EntreePrice = 0.0m; 
    decimal DessertPrice = 0.0m; 
    decimal total = 0.0m; 
    string AppetizerOrder = "", EntreeOrder = "", DessertOrder = "", order = ""; 

    public frmRestaurant() 
    { 
     InitializeComponent(); 
    } 

    private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    private void btnTotal_Click(object sender, EventArgs e) 
    { 
     CalculateTotal(); 
     Order(); 
     lblOrder.Text = order; 
     lblTotal.Text = total.ToString(); 
    } 

    private void grpAppetizer_Enter(object sender, EventArgs e) 
    { 
     if (radCheeseSticks.Checked) 
     { 
      AppetizerPrice = 5.99m; 
      AppetizerOrder = "Cheese Sticks"; 
     } 
     else if (radGarlicBread.Checked) 
     { 
      AppetizerPrice = 4.50m; 
      AppetizerOrder = "Garlic Bread"; 
     } 
     else if (radChipsnSalsa.Checked) 
     { 
      AppetizerPrice = 3.50m; 
      AppetizerOrder = "Chips and Salsa"; 
     } 
    } 

    private void grpEntree_Enter(object sender, EventArgs e) 
    { 
     if (radSteakDinner.Checked) 
     { 
      EntreePrice = 12.50m; 
      EntreeOrder = "Steak Dinner"; 
     } 
     else if (radChickenParm.Checked) 
     { 
      EntreePrice = 10.99m; 
      EntreeOrder = "Chicken Parmigiana"; 
     } 
     else if (radChipsnSalsa.Checked) 
     { 
      EntreePrice = 3.50m; 
      EntreeOrder = "Chips and Salsa"; 
     } 
    } 

    private void grpDessert_Enter(object sender, EventArgs e) 
    { 
     if (radSteakDinner.Checked) 
     { 
      DessertPrice = 12.50m; 
      DessertOrder = "Steak Dinner"; 
     } 
     else if (radChickenParm.Checked) 
     { 
      DessertPrice = 10.99m; 
      DessertOrder = "Chicken Parmigiana"; 
     } 
     else if (radChipsnSalsa.Checked) 
     { 
      DessertPrice = 3.50m; 
      DessertOrder = "Chips and Salsa"; 
     } 
    } 

    public decimal CalculateTotal() 
    { 
     total = AppetizerPrice + EntreePrice + DessertPrice; 
     return total; 
    } 

    public string Order() 
    { 
     order = AppetizerOrder + "for your appetizer," + EntreeOrder + "for your  entree, and " + DessertOrder + "for dessert"; 
     return order; 
    } 
} 
} 

答えて

1

私はGroupBox.Enterイベントはあなたのユースケースには役に立たないと思います。 enterイベントは、コントロールのアクティブ化中にいつでも呼び出されますが、値が変更されたときには呼び出されません。

「トータル」ボタンをクリックしたときにのみ、前菜/エンジェル/デザートの価格とテキストを設定することが問題の解決方法の1つです。現在のフォームでは、その前にそれを必要としません。ただ、これらのラジオボタンのすべてについてRadioButton.CheckedChangedイベントを処理し、例えば:

それを修正する別の方法が正しいイベントを使用することで、すべての

private void radGarlicBread_CheckedChanged(object sender, EventArgs e) 
{ 
    if (radGarlicBread.Checked) 
    { 
     AppetizerPrice = 4.50m; 
     AppetizerOrder = "Garlic Bread"; 
    } 
} 
+0

私は、イベントハンドラを変更し、他のいくつかの変更を加え、プログラムが実行され、合計を計算します。それはきれいではないかもしれませんが、助けてくれてありがとうございます。 –

1

まず、あなたはおそらくので、String.Format()を使用したいですそれは連鎖の束よりも少しきれいに見えるでしょう - それはまたあなたがここにスペースの欠如のようなものをキャッチするのに役立ちます(あなたの出力はそうであるように見えます、例えば 'チップスとサルサフォアあなたの前菜...')

Orderメソッドでチェックされているアイテムを見つけるのではなく、ユーザーがチェックするたびにそれをpdateしてください。

何が問題なのかよく分かりませんが、の各メソッドが呼び出されるたびに、Debug.WriteLine()を実行して何が起こっているのかを確認できます。例えば

Debug.WriteLine("grpDesert_Enter"); 
Debug.WriteLine(radSteakDinner.Checked); 
Debug.WriteLine(radChickenPark.Checked); 
Debug.WriteLine(radChipsnSalsa.Checked); 
関連する問題