C#循环复选框并添加值

时间:2016-03-31 02:28:10

标签: c# loops for-loop checkbox

我正在尝试根据用户界面中的复选框添加电话号码的值。 例如,如果选中了checkbox1(代表phone1)并且也选中了checkbox2,则程序将添加两个手机的值。 如何添加值(例如在for循环中),以便if语句更简洁。

这是我的代码:

public double totalPhone()
    {
        double total = 0;
        double item1 = 2249;
        double item2 = 1769;
        double item3 = 3099;
        double item4 = 1198;
        double item5 = 1899;

        if (chkPhone1.Checked == true)
        {
            total = total + item1;
        }

        if (chkPhone2.Checked == true)
        {
            total = total + item2;
        }

        if (chkPhone3.Checked == true)
        {
            total = total + item3;
        }

        if (chkPhone4.Checked == true)
        {
            total = total + item4;
        }

        if (chkPhone5.Checked == true)
        {
            total = total + item5;
        }

        return total;
    }

3 个答案:

答案 0 :(得分:0)

您可以将复选框的ID及其对应的值存储在Dictionary中,然后遍历控件,检查其类型和checked属性,然后添加与字典中复选框的id对应的值。

注意:代码未经过测试,但这可以帮助您顺利完成。

public double totalPhone()
{
    double total = 0;
    Dictionary<string,double> items = new Dictionary<string,double>();

    items.Add(chkPhone1.ID,2249); // ID,Text whatever works
    items.Add(chkPhone2.ID,1769);
    items.Add(chkPhone3.ID,3099);
    items.Add(chkPhone4.ID,1198);
    items.Add(chkPhone5.ID,1899);

    foreach(Control c in this.Controls)
    { 
        if(c is CheckBox && c.Checked)
        {
             total += (items[c.ID] != null ? items[c.ID] : 0);
        }
    }
    return total;
}

答案 1 :(得分:0)

我确信你的代码需要重新分解,但我没有看到任何使用循环的情况。

还有兴趣吗?你可以这样做。请注意,此代码假设复选框名称之间的一对一映射。

Dictionary<string, int> values = new Dictionary<string,int>();

int total = 0;
values.Add("item1", 2249);
values.Add("item2", 1769);
values.Add("item3", 3099);
values.Add("item4", 1198);
values.Add("item5", 1899);


foreach( CheckBox cb in this.Controls.OfType<CheckBox>()
                            .Where(c=>c.Checked))
{
    int itemprice;
    if(values.TryGetValue("item"+ Regex.Match(cb.Text, @"\d+").Value, out itemprice))
    {
         total+=itemprice;
    }
}

答案 2 :(得分:0)

假设这些复选框都在同一个GroupBox控件中,只需遍历该特定组框中的控件。我测试了它,它似乎工作。使用复选框项的标记属性来存储与其关联的值:

public partial class Form1 : Form
{
    private static double Total { get; set; }

    private void Form1_Load(object sender, EventArgs e)
    {
        var ctrl = groupBox1;
        foreach (var checkBox in ctrl.Controls.OfType<CheckBox>())
        {
            Total = checkBox.Checked ? (Total + Convert.ToDouble(checkBox.Tag)) : Total;
        }
    }
}