【问题标题】:how loop through multiple checkbox in C#如何在C#中循环多个复选框
【发布时间】:2013-09-13 05:05:53
【问题描述】:

我在 winfrom 中有 100 个复选框。 它们的名称是连续的,如 checkbox1、checkbox2 等。 我的winform中有一个提交按钮。单击提交按钮后,它会检查,如果选中了复选框,则更新某个值,否则更新另一个值。 我必须选中 100 复选框。 所以我必须遍历 100 个复选框来检查复选框是否被选中。

我知道如何勾选复选框

private void sumit_button_Click(object sender, EventArgs e)
{
     if (checkbox1.Checked)
     { 
        //  update 
     }
     else
     {  
        // update another  
     }

     if (checkbox2.Checked)
     {  
        //  update    
     }
     else
     {   
        // update another  
     }

     ......................and so on

} 

但是我怎样才能为 100 个复选框做到这一点???

【问题讨论】:

  • foreach 控件 c 在 form.controls 中。那么如果 c 是 CheckBox
  • @DanielAbouChleih-你在容器中拥有所有复选框吗?
  • 您可以考虑使用数据网格控件,而不是在其中您将有一个复选框列和一些其他不可见的列来保存每个复选框的通用逻辑。然后你可以遍历数据网格的行。
  • 要更新的数据和checkbox有什么关系吗,或者可以建立关系吗?

标签: c# checkbox


【解决方案1】:
foreach (var control in this.Controls) // I guess this is your form
            {
                if (control is CheckBox)
                {
                    if (((CheckBox)control).Checked)
                    {
                        //update
                    }
                    else
                    {
                        //update another
                    }
                }
            }

【讨论】:

    【解决方案2】:
    foreach (var ctrl in panel.Controls) {
        if (ctrl is CheckBox && ((CheckBox)ctrl).IsChecked) {
            //Do Something
        }
    }
    

    【讨论】:

    • 就是这样。 “容器中是否包含所有复选框?”是什么意思?
    • 容器内是指面板还是组框?
    • 正确,但as + null 检查比is + cast 更好(因为你只需要转换一次)。更好的是Controls.OfType<CheckBox>()
    • 但是为什么要问我呢?
    • 请注意,这是 C# .NET 4 代码,与旧的 .NET 不兼容
    【解决方案3】:
    foreach (var box in this.Controls.OfType<CheckBox>())
    {
        if (box.Checked)
        {
            //...
        }
        else
        {
            //...
        }
    }
    

    【讨论】:

    • 如何获取复选框编号以在 if 子句中使用。 @Joel Coehoorn
    • @DarkenShooter 你不需要它。您可以直接引用该复选框。如果您确实需要该号码,则说明您的设计有问题。
    【解决方案4】:

    有 LINQ 方法OfType。为什么不使用它来摆脱手动类型测试和强制转换?

    foreach (var ctrl in panel.Controls.OfType<CheckBox>().Where(x => x.IsChecked)
    {
        // ....
    }
    

    【讨论】:

    • 确实有人提出来了 :)
    • 糟糕...没注意到
    【解决方案5】:
        foreach (Control childc in Page.Controls)
        {
    
                if (childc is CheckBox)
                {
                    CheckBox chk = (CheckBox)childc;
                    //do your operation
    
                }
    
        }
    

    【讨论】:

      【解决方案6】:

      这是这个问题的书面答案......

      c#

                 string movie="";
                 if (checkBox1.Checked == true)
                  {
                      movie=movie+checkBox1.Text + ",";
                  }
                  if (checkBox2.Checked == true)
                  {
                      movie=movie+checkBox2.Text + ",";
                  }
                  if (checkBox3.Checked == true)
                  {
                      movie=movie+checkBox3.Text + ",";
                  }
      
                  if (checkBox4.Checked == true)
                  {
                      movie = movie + checkBox4.Text + ",";
                  }
                  if (checkBox5.Checked == true)
                  {
                      movie = movie + checkBox5.Text + ",";
                  }
                  if (checkBox6.Checked == true)
                  {
                      movie = movie + checkBox6.Text + ",";
                  }
                row["EnquiryFor"] = movie.ToString();
      

      其中row是DataRow的对象,EnquiryFor是sql表列的名称......

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        相关资源
        最近更新 更多