我正在为一个大学项目创建比萨菜单,并且有一个饮料区。我有一个digitalupdown供用户选择他们想要的特定饮料的量。我已经能够创建一个for循环,以便在增加numericupdown的值时将其添加到总数上,但是我正在努力寻找一种方法,当减小numericupdown的值时从总数中减去£0.90。
可乐数字代码的代码
private void numCola_ValueChanged(object sender, EventArgs e)
{
for (int i = 1; i < 2; i++)
{
Total = Total + Cola;
lblTotal.Text = Total.ToString("C");
}
}
编辑
现在,我发现我需要创建一个新事件来更新总数,我已经将此方法添加到我的奶酪比萨和额外的奶酪中。但是,当我同时选择了这两项(总计= 4.00英镑),然后我有1瓶可乐时,第一个可乐只收取0.40英镑,而不是0.90英镑。
private void UpdateTotal()
{
Total = Convert.ToDouble(radCheeseTrad.Checked) * CheeseTraditional;
Total += Convert.ToDouble(chkCheeseExtraCheese.Checked) * ExtraCheese;
Total += Convert.ToDouble(numCola.Value) * Cola;
lblTotal.Text = $"{Total:C}";
}
private void numCola_ValueChanged(object sender, EventArgs e)
{
UpdateTotal();
}
private void radCheeseTrad_MouseClick(object sender, MouseEventArgs e)
{
lstOrder.Items.Add("Cheese and Tomato Traditional");
UpdateTotal();
}
private void chkCheeseExtraCheese_MouseClick(object sender, MouseEventArgs e)
{
lstOrder.Items.Add("Extra Cheese");
UpdateTotal();
chkCheeseExtraCheese.Checked = false;
}
我找到了一种使这项工作有效的方法。我必须创建一个新事件来更新总数。
private void UpdateTotal()
{
Total = Convert.ToDouble(numCola.Value) * Cola;
lblTotal.Text = $"{Total:C}";
}
private void numCola_ValueChanged(object sender, EventArgs e)
{
UpdateTotal();
}
您的循环通过重复加法执行乘法。最好通过实际乘法来做到这一点。您还可以循环设置标签;尽管有效,但只有最后一次分配才有效,因为在循环仍处于控制状态时,UI不会显示分配给标签文本的瞬态值。
为此,您需要保留要购买的物品的集合以及每个物品的数量。然后将总数计算为单位价格的产品总和乘以所购买商品的数量:
// This is pseudo-code; you will need to substitute your actual
// collections when you make them.
private void num_ValueChanged(object sender, EventArgs e) {
decimal total = 0;
foreach (var product in products) {
// Get numeric up-down for product
var numUpDown = ...
total += Convert.ToInt32(numUpDown.Value) * product.Price;
}
lblTotal.Text = total.ToString("C");
}
请注意,这种方法使您可以对所有产品使用相同的事件处理程序。