如何从选中的列表框中获取值并输入到文本框中

时间:2015-04-22 02:13:18

标签: c# foreach checkedlistbox

基本上我正在为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循环中导致索引错误,因为我不确切知道我在寻找什么。

3 个答案:

答案 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
                }
            }