输出标签只显示我想要显示的部分

问题描述:

我有这个程序,我正在为班级工作,我认为问题在于我的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; 
    } 
} 
} 

我认为GroupBox.Enter事件对您的用例无用。输入事件在控件激活期间有时被调用,但在值被更改时不会被调用。

解决您的问题的一种方法是仅当点击“总计”按钮时设置开胃菜/主菜/甜点价格和文字。在此之前,您现在不需要它。

另一种方式来解决它是用正确的事件:只要处理RadioButton.CheckedChanged事件,所有这些单选按钮,例如:

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

我改变了事件处理程序,并提出了一些其他修改,程序运行和计算总。它可能不漂亮,但它确实有用,感谢您的帮助。 – 2012-03-25 01:25:32

首先,你可能想使用String.Format(),因为它会看起来比一串连接更清洁 - 它也可以帮助你捕捉空间不足的东西(你的输出看起来就像是,例如'芯片和萨尔萨为你的开胃菜...')

找到Order方法中检查的项目可能会更好,而不是您每次用户检查时更新它。

我不知道什么是错,但也许你可以每次调用Enter()方法时都会调用Debug.WriteLine()来查看发生了什么。

例如:

Debug.WriteLine("grpDesert_Enter"); 
Debug.WriteLine(radSteakDinner.Checked); 
Debug.WriteLine(radChickenPark.Checked); 
Debug.WriteLine(radChipsnSalsa.Checked);