输出标签只显示我想要显示的部分
问题描述:
我有这个程序,我正在为班级工作,我认为问题在于我的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";
}
}
答
首先,你可能想使用String.Format()
,因为它会看起来比一串连接更清洁 - 它也可以帮助你捕捉空间不足的东西(你的输出看起来就像是,例如'芯片和萨尔萨为你的开胃菜...')
找到Order
方法中检查的项目可能会更好,而不是您每次用户检查时更新它。
我不知道什么是错,但也许你可以每次调用Enter()
方法时都会调用Debug.WriteLine()
来查看发生了什么。
例如:
Debug.WriteLine("grpDesert_Enter");
Debug.WriteLine(radSteakDinner.Checked);
Debug.WriteLine(radChickenPark.Checked);
Debug.WriteLine(radChipsnSalsa.Checked);
我改变了事件处理程序,并提出了一些其他修改,程序运行和计算总。它可能不漂亮,但它确实有用,感谢您的帮助。 – 2012-03-25 01:25:32