C# 在CheckedChange事件中禁用/启用多个项目
我有几个复选框和一个文本框。当我选中某个复选框时,它将禁用文本框和其他指定的复选框 对于文本框,代码工作正常。当我添加C# 在CheckedChange事件中禁用/启用多个项目,c#,winforms,checkbox,C#,Winforms,Checkbox,我有几个复选框和一个文本框。当我选中某个复选框时,它将禁用文本框和其他指定的复选框 对于文本框,代码工作正常。当我添加else语句时,它仍然适用于文本框,但不适用于复选框。如果我省略了else,并且仅使用If禁用它们,则它会起作用。如果复选框未选中,我需要它来重新启用它们 我在面板中有所有有问题的复选框 private void noModemChkbox_CheckedChanged(object sender, EventArgs e) { if (noMod
else
语句时,它仍然适用于文本框,但不适用于复选框。如果我省略了else
,并且仅使用If
禁用它们,则它会起作用。如果复选框未选中,我需要它来重新启用它们
我在面板中有所有有问题的复选框
private void noModemChkbox_CheckedChanged(object sender, EventArgs e)
{
if (noModemChkbox.Checked == true)
{
custModemText.Enabled = false;
pwrCbx.Enabled = false;
e1Cbx.Enabled = false;
e2Cbx.Enabled = false;
e3Cbx.Enabled = false;
e4Cbx.Enabled = false;
dslblinkCbx.Enabled = false;
enetCbx.Enabled = false;
dslCbx.Enabled = false;
inetCbx.Enabled = false;
inetredCbx.Enabled = false;
wlanCbx.Enabled = false;
activityChkbox.Enabled = false;
}
else
custModemText.Enabled = true;
pwrCbx.Enabled = true;
e1Cbx.Enabled = true;
e2Cbx.Enabled = true;
e3Cbx.Enabled = true;
e4Cbx.Enabled = true;
dslblinkCbx.Enabled = true;
enetCbx.Enabled = true;
dslCbx.Enabled = true;
inetCbx.Enabled = true;
inetredCbx.Enabled = true;
wlanCbx.Enabled = true;
activityChkbox.Enabled = true;
}
您的else周围需要括号,如下所示:
else
{
custModemText.Enabled = true;
pwrCbx.Enabled = true;
e1Cbx.Enabled = true;
e2Cbx.Enabled = true;
e3Cbx.Enabled = true;
e4Cbx.Enabled = true;
dslblinkCbx.Enabled = true;
enetCbx.Enabled = true;
dslCbx.Enabled = true;
inetCbx.Enabled = true;
inetredCbx.Enabled = true;
wlanCbx.Enabled = true;
activityChkbox.Enabled = true;
}
您的原始代码实际上是这样解释的:
else
{
custModemText.Enabled = true;
}
pwrCbx.Enabled = true;
e1Cbx.Enabled = true;
e2Cbx.Enabled = true;
e3Cbx.Enabled = true;
e4Cbx.Enabled = true;
dslblinkCbx.Enabled = true;
enetCbx.Enabled = true;
dslCbx.Enabled = true;
inetCbx.Enabled = true;
inetredCbx.Enabled = true;
wlanCbx.Enabled = true;
activityChkbox.Enabled = true;
您忘了在else语句周围加括号:
private void noModemChkbox_CheckedChanged(object sender, EventArgs e)
{
if (noModemChkbox.Checked == true)
{
custModemText.Enabled = false;
pwrCbx.Enabled = false;
e1Cbx.Enabled = false;
e2Cbx.Enabled = false;
e3Cbx.Enabled = false;
e4Cbx.Enabled = false;
dslblinkCbx.Enabled = false;
enetCbx.Enabled = false;
dslCbx.Enabled = false;
inetCbx.Enabled = false;
inetredCbx.Enabled = false;
wlanCbx.Enabled = false;
activityChkbox.Enabled = false;
}
else
{
custModemText.Enabled = true;
pwrCbx.Enabled = true;
e1Cbx.Enabled = true;
e2Cbx.Enabled = true;
e3Cbx.Enabled = true;
e4Cbx.Enabled = true;
dslblinkCbx.Enabled = true;
enetCbx.Enabled = true;
dslCbx.Enabled = true;
inetCbx.Enabled = true;
inetredCbx.Enabled = true;
wlanCbx.Enabled = true;
activityChkbox.Enabled = true;
}
}
private void noModemChkbox_CheckedChanged(object sender, EventArgs e)
{
if (noModemChkbox.Checked == true)
{
custModemText.Enabled = false;
pwrCbx.Enabled = false;
e1Cbx.Enabled = false;
e2Cbx.Enabled = false;
e3Cbx.Enabled = false;
e4Cbx.Enabled = false;
dslblinkCbx.Enabled = false;
enetCbx.Enabled = false;
dslCbx.Enabled = false;
inetCbx.Enabled = false;
inetredCbx.Enabled = false;
wlanCbx.Enabled = false;
activityChkbox.Enabled = false;
}
else
{
custModemText.Enabled = true;
pwrCbx.Enabled = true;
e1Cbx.Enabled = true;
e2Cbx.Enabled = true;
e3Cbx.Enabled = true;
e4Cbx.Enabled = true;
dslblinkCbx.Enabled = true;
enetCbx.Enabled = true;
dslCbx.Enabled = true;
inetCbx.Enabled = true;
inetredCbx.Enabled = true;
wlanCbx.Enabled = true;
activityChkbox.Enabled = true;
}
}
这不是更简单吗
private void noModemChkbox_CheckedChanged(object sender, EventArgs e)
{
bool bEnabled = !noModemChkbox.Checked;
custModemText.Enabled = bEnabled;
pwrCbx.Enabled = bEnabled;
e1Cbx.Enabled = bEnabled;
e2Cbx.Enabled = bEnabled;
e3Cbx.Enabled = bEnabled;
e4Cbx.Enabled = bEnabled;
dslblinkCbx.Enabled = bEnabled;
enetCbx.Enabled = bEnabled;
dslCbx.Enabled = bEnabled;
inetCbx.Enabled = bEnabled;
inetredCbx.Enabled = bEnabled;
wlanCbx.Enabled = bEnabled;
activityChkbox.Enabled = bEnabled;
}
您需要在else子句中的所有内容周围加上括号
{}
(如果您有多条语句):
哈哈,接球不错,我都没注意到,也没注意到。谢谢!另一种方法当然要简单得多,但在这一点上超出了我的能力,因为我不完全理解代码中发生了什么,但是感谢这个例子,我将做一些研究来了解它是如何工作的@Nabbic-它将临时布尔变量设置为与noModemChkbox(!表示否)的选中值相反的值,然后该值将应用于所有启用值(+1 btw)+1,以显示更好的方式并指出问题。这也使得添加由该复选框控制的新组件更容易。您只需将其添加到一次位置,而无需添加if和else块。非常感谢,我甚至没有注意到它。@Nabbic没问题。这就是为什么即使只是一行正文,也最好使用括号。