2

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

要么是因为我使用了错误的事件或错误的放置代码的位置,要么是代码本身不正确,有人可以看看吗?

4

3 回答 3

8

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

if (panel1.Controls.OfType<CheckBox>().Any(x => x.Checked)) {
    // at least one is checked..
于 2012-11-12T22:06:39.253 回答
1

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

  • 表单的Load事件,在您使用任何保存的值加载复选框后
  • 复选框的CheckedChanged事件处理程序,因此按钮状态会随着复选框被选中而更新
于 2012-11-12T22:06:56.637 回答
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;
    }
  }
}
于 2020-06-16T05:08:09.987 回答