我在面板内有几个复选框和一个按钮,位于一个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;
}
}
}
}
}
这是因为我使用错误的事件或错误的地方放置代码,或者代码本身不正确,有人可以看一下吗?
答案 0 :(得分:7)
你可以这样做(注意......你的具体循环是多余的..你知道容器的名称..为什么循环搜索它?)
if (panel1.Controls.OfType<CheckBox>().Any(x => x.Checked)) {
// at least one is checked..
答案 1 :(得分:1)
此代码应在两个地方运行:
Load
事件CheckedChanged
事件处理程序,因此在选中复选框时更新按钮状态答案 2 :(得分: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;
}
}
}