C# 检查是否选中了表单的所有复选框
我有多个复选框,这些复选框是我通过代码手工创建的,因此我知道我可以使用以下方法获取复选框:C# 检查是否选中了表单的所有复选框,c#,winforms,C#,Winforms,我有多个复选框,这些复选框是我通过代码手工创建的,因此我知道我可以使用以下方法获取复选框: foreach (var checkBox in this.Controls.OfType<CheckBox>()) { } 简单地说 bool allChecked = this.Controls.OfType<CheckBox>().All(c => c.Checked); 如果您确定复选框可用,则可以使用 var
foreach (var checkBox in this.Controls.OfType<CheckBox>())
{
}
简单地说
bool allChecked = this.Controls.OfType<CheckBox>().All(c => c.Checked);
如果您确定复选框可用,则可以使用
var allChecked = this.Controls.OfType<CheckBox>().All(x => x.Checked);
如果要验证是否选中了表单上的所有复选框,甚至是属于其他容器控件的复选框,则必须迭代每个控件的
控件
集合(而不仅仅是属于表单
)
一种方法是编写一个递归方法,该方法接收容器控件(如表单
)并检查其集合中的所有控件。如果包含的任何控件是复选框
,但未选中,则返回false
。否则,对该控件的控件
集合执行递归检查。如果这些检查都不为false,则返回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;
}
现在,如果调用此函数并将主窗体作为容器控件传递,则将检查窗体上的所有控件,包括所有容器(甚至嵌套容器)中的控件:
你不能通过反转where子句的逻辑并检查计数是否等于零来获取所有未检查的控件吗?是否有任何复选框在面板或其他容器中?使用上面的代码,你可以从
bool allChecked=true开始
并在foreach
中添加以下行:if(!checkbox.Checked){allChecked=false;break;}
我尝试过,但它总是返回True VALUE它返回True,但这可能是不可取的,因为在this.control中找不到复选框。我尝试过,但它总是返回True VALUE您的复选框是否在某种容器中?(面板或组框)在这种情况下,您需要使用容器的控件集合,它们位于FlowLayoutPanel内,然后将其更改为FlowLayoutPanel的名称。问题是它们位于FlowLayoutPanel内,但在其中我有组框,因此每个组框都有不同的复选框,我有一个groupBox列表,所以我迭代为:foreach(groupBox中的var g){}
,但是现在,如果所有复选框都在不同的groupBox中,我怎么知道它们是否都被选中了呢?
var allChecked = this.Controls.OfType<CheckBox>().All(x => x.Checked);
bool allChecked = false;
var checkBoxes = this.Controls.OfType<CheckBox>();
if (checkBoxes.Any())
allChecked = checkboxes.All(x => x.Checked);
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);