【问题标题】:C# checkbox checked countC# 复选框选中计数
【发布时间】:2012-11-01 09:12:59
【问题描述】:

我在一个面板内有几个复选框和一个按钮,在一个 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;
                        }
                    }
                }
            }
        }

要么是我使用了错误的事件或放错了代码的地方,要么是代码本身不正确,请大家看看?

【问题讨论】:

  • 为什么不改用CheckedListBox?然后就像获取CheckedListBox1.CheckedItems.Count一样简单。

标签: c# winforms checkbox count


【解决方案1】:

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

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

【讨论】:

  • 在什么情况下我应该把那个亲爱的先生?
  • CheckChanged 复选框事件。让你的所有复选框都使用相同的CheckChanged 事件处理程序。这样你只需要将它放入那个事件中。
  • 无论如何我可以避免在所有复选框中输入代码吗?喜欢在某个地方放一些东西来计算选中了多少个复选框?
  • 是的。您使所有复选框都使用相同的CheckChanged 事件。请参阅此处:stackoverflow.com/questions/6315737/… 了解如何执行此操作。
【解决方案2】:

这段代码应该在两个地方运行:

  • 表单的Load 事件,在您加载带有任何已保存值的复选框后
  • 复选框的CheckedChanged 事件处理程序,因此按钮状态会随着复选框被选中而更新

【讨论】:

    【解决方案3】:

    删除这部分 您永远不会在下面的代码中使用“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;
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多