C#复选框已检查计数

时间:2012-11-12 22:01:12

标签: c# winforms checkbox count

我在面板内有几个复选框和一个按钮,位于一个tabPage内,位于WinForm C#应用程序中。

我要做的是确保至少选中一个复选框,以便启用按钮可点击,否则按钮将被禁用(灰色显示不可点击)。

我尝试了这个(在Form_Load事件中),但它不起作用:

int counter = 0;
        foreach (Control p in tabPage1.Controls)
        {
            if (p is Panel)
            {
                foreach (Control c in panel1.Controls)
                {
                    if (c is CheckBox)
                    {
                        if (((CheckBox)c).Checked)
                        {
                            counter++;
                        }
                        if (counter < 1)
                        {
                            button1.Enabled = false;
                        }
                        else
                        {
                            button1.Enabled = true;
                        }
                    }
                }
            }
        }

这是因为我使用错误的事件或错误的地方放置代码,或者代码本身不正确,有人可以看一下吗?

3 个答案:

答案 0 :(得分:7)

你可以这样做(注意......你的具体循环是多余的..你知道容器的名称..为什么循环搜索它?)

if (panel1.Controls.OfType<CheckBox>().Any(x => x.Checked)) {
    // at least one is checked..

答案 1 :(得分:1)

此代码应在两个地方运行:

  • 在您使用任何已保存的值加载复选框后,表单的Load事件
  • 复选框'CheckedChanged事件处理程序,因此在选中复选框时更新按钮状态

答案 2 :(得分:0)

删除此部分 您永远不会在下面的代码中使用“ p”变量...

foreach(Control p in tabPage1.Controls)
{
  if (p is Panel)
  {
int counter = 0;
foreach(Control c in panel1.Controls)
{
  if (c is CheckBox)
  {
    if (((CheckBox)c).Checked)
    {
      counter++;
    }
    if (counter < 1) {
      button1.Enabled = false;
    }
    else {
      button1.Enabled = true;
    }
  }
}