C# 输出标签仅显示我要显示的部分内容

C# 输出标签仅显示我要显示的部分内容,c#,C#,我有一个程序,我正在为课堂工作,我想问题在于我的if语句。当我运行程序并进行选择并单击“总计”按钮时,我会在订单标签中显示“您的开胃菜、主菜和甜点”,并在订单总计标签中显示牛排晚餐的价格。我想我可能不得不使用switch语句,但我不确定任何建议是否会有很大帮助,谢谢 namespace Restaurant { public partial class frmRestaurant : Form { decimal AppetizerPrice = 0.0m; deci

我有一个程序,我正在为课堂工作,我想问题在于我的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;
    }
 }
 }
我认为该事件对您的用例没有用处。enter事件在控件激活期间调用,但在值更改时不会调用

解决问题的一种方法是只在单击“总计”按钮时设置开胃菜/主菜/甜点的价格和文本。您现在不需要在当前表单中使用它

另一种修复方法是使用正确的事件:只需处理所有这些单选按钮的事件,例如:

private void radGarlicBread_CheckedChanged(object sender, EventArgs e)
{
    if (radGarlicBread.Checked)
    {
        AppetizerPrice = 4.50m;
        AppetizerOrder = "Garlic Bread";
    }   
}
Debug.WriteLine("grpDesert_Enter");
Debug.WriteLine(radSteakDinner.Checked);
Debug.WriteLine(radChickenPark.Checked);
Debug.WriteLine(radChipsnSalsa.Checked);

首先,您可能希望使用
String.Format()
,因为它看起来比一堆串联要干净一点——它还可以帮助您发现这里缺少空格之类的问题(您的输出看起来像是,例如“您的开胃菜的薯片和沙拉…”)

Order
方法中,最好只查找选中的项目,而不是在用户每次检查时更新它

我不确定出了什么问题,但也许每次调用
Enter()
方法时都可以执行
Debug.WriteLine()

例如:

private void radGarlicBread_CheckedChanged(object sender, EventArgs e)
{
    if (radGarlicBread.Checked)
    {
        AppetizerPrice = 4.50m;
        AppetizerOrder = "Garlic Bread";
    }   
}
Debug.WriteLine("grpDesert_Enter");
Debug.WriteLine(radSteakDinner.Checked);
Debug.WriteLine(radChickenPark.Checked);
Debug.WriteLine(radChipsnSalsa.Checked);

我更改了事件处理程序并做了一些其他更改,程序运行并计算总数。它可能不漂亮,但确实有用,谢谢你的帮助。