Если вы хотите убедиться, что отмечены все флажки в форме, даже те, которые принадлежат другим элементам управления контейнера, вам придется перебирать коллекцию Controls
каждого элемента управления (а не только те, которые принадлежат Form
).
Один из способов сделать это - написать рекурсивный метод, который принимает элемент управления контейнера (например, Form
) и проверяет все элементы управления в его коллекции.Если какой-либо элемент управления является Checkbox
и не проверен, верните false
.В противном случае выполните рекурсивную проверку коллекции Controls
этого элемента управления.Если ни одна из этих проверок не является ложной, верните true.
Например:
private static bool ContainedCheckboxesAreChecked(Control containerControl)
{
// For each control in the container
foreach (Control control in containerControl.Controls)
{
// Return false if the control is a checkbox and it's not checked
if (!(control as CheckBox)?.Checked ?? false) return false;
// Do a recursive check on this control's Controls collection
if (!ContainedCheckboxesAreChecked(control)) return false;
}
// If we got this far, return true
return true;
}
Теперь, если вы вызовете это и передадите главную форму в качестве элемента управления контейнера, вы изучитевсе элементы управления в форме, включая все контейнеры (даже вложенные):
bool allCheckBoxesAreChecked = ContainedCheckboxesAreChecked(this);