【问题标题】:C# multiple checkboxesC# 多个复选框
【发布时间】:2014-01-06 20:40:04
【问题描述】:

我的表单上有 10 个checkboxes。它们被命名为 checkBox1、checkBox2、...、checkBox10。 目前我的代码如下所示:

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


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

谢谢, 尼克

【问题讨论】:

    标签: c# checkbox


    【解决方案1】:

    不是很安全,但方法很简单:

    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);
        }
    }
    

    【讨论】:

    • 如果Form 有第 11 个复选框,MyFunction(int) 假设不调用呢?
    • 非常感谢 Bartosz。我正在接近您提出的解决方案之一,但您的解决方案更优雅。最后我选择了你的第二个样品。我不得不将代码更改为 int index = int.Parse(checkBox.Name.Remove(0, 8));因为它给出了一个错误。
    • 就个人而言,我最喜欢列表方法,因为它最不可能引起意外行为,因为将来会在您的表单上放置新的复选框!
    【解决方案2】:

    好的,任何控件名称中都有属性名称检查此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 
    

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多