C#多个复选框

时间:2014-01-06 11:41:02

标签: c# checkbox

我的表单上有10 checkboxes。它们被命名为checkBox1,checkBox2,...,checkBox10。 目前我的代码看起来像这样:

 if(checkBox1.Checked)
   Call MyFunction(1);  
 if(checkBox2.Checked) 
   Call MyFunction(2);


因为我传递给我的函数的参数与checkbox数字相同,所以我想使用for循环,因此对于每个checkbox_i,我应该调用MyFunction(i)

谢谢, 尼克

2 个答案:

答案 0 :(得分:2)

不是很安全,但很简单:

int index = 1; 
foreach (var checkBox in this.Controls.OfType<CheckBox>())
{
    if (checkBox.Checked)
    {
        MyFunction(index);
    }

    index++;
}

下一个想法更安全,但不是很优雅:

foreach (var checkBox in this.Controls.OfType<CheckBox>())
{
    if (checkBox.Checked)
    {
        int index = int.Parse(checkBox.Name.Substring(8));
        MyFunction(index);
    }
}

最终,最好是使用适当的索引填充所有复选框的.Tag属性。在这个解决方案中,你甚至可以跳过一些像这样的复选框:

foreach (var checkBox in this.Controls.OfType<CheckBox>().Where(c => c.Checked))
{
    int? index = checkBox.Tag as int;

    if (index.HasValue)
    {
        MyFunction(index.Value);
    }
}

更可读的方法是在表单的构造函数中有一个您对此过程感兴趣的复选框列表,例如:

relevantCheckBoxes = new List<CheckBox>();
relevantCheckBoxes.Add(this.checkBox1);
relevantCheckBoxes.Add(this.checkBox3);
// etc.

然后:

for (int index = 0;index < relevantCheckboxes.Count;++index)
{
    if (relevantCheckboxes[index].Checked)
    {
        MyFunction(index);
    }
}

答案 1 :(得分:1)

确定在任何控件名称中都有属性名称检查此pesodo代码

Checkbox t=CheckBox(object);
var number=t.name.substring("checkbox".length,name.length-"checkbox".length) // to get only number or you can split name by regular expression

myfunction(int.parse(number));
// try this code and and ask here agine if any problem due to I can't test it now