取消选中所有带有C#的复选框

时间:2018-12-18 19:14:37

标签: c# winforms

我正在尝试编写一个代码,当单击按钮时,它将取消选中表单中的所有复选框。我知道我可以做到

checkBox1.Checked = false;
checkBox2.Checked = false;
checkBox3.Checked = false;

,依此类推,但是我有大约35个复选框,所以我希望使用更简单的代码。我一直在网上找到看起来像这样的东西;

foreach (Control cBox in this.Controls)
{
    if (cBox is CheckBox)
    {
        ((CheckBox)cBox).Checked = false;
    }
}

我希望使用类似的方法,而不是写checkBox1.Checked = false;约70次(因为我有2个按钮,这两个按钮都需要做各种事情,然后取消选中所有复选框。

我看到了另一个解决方案,涉及堆栈面板或某种类似于Java或HTML而不是C#的代码,并且似乎还涉及将每个checkBox写入.checked状态作为其自己的行,这并不能节省我任何代码行。

任何提示将不胜感激。谢谢大家:)

2 个答案:

答案 0 :(得分:3)

使用我的新朋友@HandbagCrab的一些信息回答我自己的问题:

foreach (Control cBox in tabPage1.Controls)
{
if (cBox is CheckBox)
    {
        ((CheckBox)cBox).Checked = false;
    }
}

添加tabPage1解决了我的问题。以前,我一直在使用this.Controls,它仅在该依赖项内限制对控件的访问。我仍然可以通过将复选框单独命名为checkBox1.Checked = false;来控制基于复选框的其他事物,但这只是因为我按名称调用了它们,而不是要求代码浏览所有Controls

答案 1 :(得分:0)

您可以使用C#7.0+模式匹配:

foreach(Control control in controls)
{
    if (control is CheckBox chk) chk.Checked = false;
}
相关问题