检查是否已选中表单的所有复选框

Jon*_*han -3 c# winforms

我有多个复选框,我是从代码中创建的,所以我知道我可以使用以下复选框:

foreach (var checkBox in this.Controls.OfType<CheckBox>())
            {

            }
Run Code Online (Sandbox Code Playgroud)

但是,我想知道或者我想要的结果是知道我的表单的所有复选框是否被检查,如果所有复选框被选中则返回true,如果缺少复选框则返回false ...如何实现?问候

bool allChecked = ... 
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

就像

bool allChecked = this.Controls.OfType<CheckBox>().All(c => c.Checked);
Run Code Online (Sandbox Code Playgroud)

我不确定AllControls(在原始的未经编辑的帖子中)是什么.因为这个属性似乎不是标准的.此示例使用任何控件容器中存在的标准Controls集合,如顶级Form

如果将CheckBoxes分布在不同的控件容器中,则问题会更复杂.在这种情况下,您可以使用递归函数迭代地浏览您的控件并计算其中检查的数量

int result = RecursiveCheck(f.Controls);
if(result > 0)
    Console.WriteLine("Something is not checked");

int RecursiveCheck(Control.ControlCollection col)
{
    int count = 0;
    foreach(Control c in col)
    {
        if (c.Controls.Count > 0)
        {
            count += c.Controls.OfType<CheckBox>().Count(x => !x.Checked);
            count += RecursiveCheck(c.Controls);
        }   
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)