基本上我正在为Deli创建一个app作为我的C#类的项目作业。我想知道的基本上是如何使用CheckedListBox
循环从foreach
获取值并使用if
语句为CheckedListBox
中的项设置数字编号},从那里我希望将值输入TextBox
。
逻辑上,我有一个列表,用于添加生菜和西红柿等订单的商品。如果我希望每个加载项每个花费25美分,并让用户将这些值视为TextBox
中添加的总费用。
这是我到目前为止所拥有的:
//adding the amount of money for the add on prices
private void clbxAddonsT_SelectedIndexChanged(object sender, EventArgs e)
{
foreach( object item in clbxAddonsT.CheckedItems)
{
if (item == "Lettuce" ) //on
{
txtOrderSubtotal2.Text = "0.20"; //adding value into textbox
}
}
}
我认为我的问题是我在foreach
循环中导致索引错误,因为我不确切知道我在寻找什么。
答案 0 :(得分:0)
正如你所说,每增加一个成本0.25美分并且你想在文本框内显示总数(为什么总计显示在文本框中?)这里有你应该怎么做:
var totalAddOns = 0.0;
foreach (object item in clbxAddonsT.CheckedItems)
{
totalAddOns += 0.2;
}
txtOrderSubtotal2.Text = totalAddOns.ToString("0.00");
您不必检查项目名称是"生菜" (每增加成本0.20)并且您不必在循环内部使用文本框,因为总和尚未完成。您必须将总和存储在局部变量中,并在完成循环复选框后显示它。
答案 1 :(得分:0)
如果每个检查项目的费用为0.25,您只需将计数乘以:
private void clbxAddonsT_SelectedIndexChanged(object sender, EventArgs e)
{
txtOrderSubtotal2.Text = (clbxAddonsT.CheckedItems.Count * 0.25).ToString();
}
或者,如果物品的价格不同,您可以按照以下方式执行操作:
private void clbxAddonsT_SelectedIndexChanged(object sender, EventArgs e)
{
txtOrderSubtotal2.Text = clbxAddonsT.CheckedItems.Cast<string>()
.Sum(i => this.GetPrice(i))
.ToString();
}
private double GetPrice(string item)
{
switch (item)
{
case "Lettuce":
return 0.25;
case "Tomatoes":
return 0.20;
default:
return 0.0;
}
}
此外,我认为您要使用ItemCheck
事件而不是SelectedIndexChanged
。这只会在项目即将更改其检查状态时触发。然后,您需要在执行计算之前自己将新项目添加到已检查项目中:
private void clbxAddonsT_ItemCheck(object sender, ItemCheckEventArgs e)
{
var checkedItems = clbxAddonsT.CheckedItems.Cast<string>().ToList();
if (e.NewValue == CheckState.Checked)
checkedItems.Add(clbxAddonsT.Items[e.Index].ToString());
txtOrderSubtotal2.Text = (checkedItems.Count * 0.25).ToString();
}
答案 2 :(得分:0)
你可以将txtOrderSubtotal2.text转换为int添加0.20,然后转换为字符串:
foreach( object item in clbxAddonsT.CheckedItems)
{
if (item == "Lettuce" ) //on
{
int total =0;
int.tryParse( txtOrderSubtotal2.Text,out total);
txtOrderSubtotal2.Text = total + 0.20 + ""; //adding value into textbox
}
}