我可以发誓我知道如何做到这一点......无论如何,我想检查控件是否与其他两个控件的名称相匹配。如果它匹配控件名称的 ,我希望它能够中止“任务”。
private void DisableMessageControls(Control myControl)
{
// if the control is checkbox3 OR panel7 I do NOT want to execute the below code!
if (myControl.Name != checkBox3.Name || myControl.Name != panel7.Name)
if (checkBox3.Checked == true)
{
myControl.Enabled = true;
}
else
{
myControl.Enabled = false;
}
foreach (Control myChild in myControl.Controls)
DisableMessageControls(myChild);
}
答案 0 :(得分:4)
你有||结合否定条件。这就好说,“如果我的名字不是Jon 或,那就不是Jeff。”好吧,它不可能两者兼而有之,因此条件永远都是真的。我怀疑你真的想要:
// Do you really need to check names instead of just references?
// You could probably just use
// if (myControl != checkBox3 && myControl != panel7)
if (myControl.Name != checkBox3.Name && myControl.Name != panel7.Name)
{
// No need for your if block here
myControl.Enabled = checkBox3.Checked;
}
我还鼓励你总是使用大括号,即使对于单语句if
正文 - 这更清楚地表明foreach
并不意味着成为其中的一部分if
身体。
答案 1 :(得分:2)
您的if语句将始终返回true
(假设checkBox3和panel7具有不同的名称)。
我认为你想要的是:
if (myControl.Name != checkBox3.Name && myControl.Name != panel7.Name)
或:
if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))
答案 2 :(得分:0)
if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))
答案 3 :(得分:0)
以下是我最终使用的内容:
private void DisableMessageControls(Control myControl)
{
if (myControl.Name == checkBox3.Name || myControl.Name == panel7.Name || myControl.Name == tpMessage.Name)
{
}
else
{
myControl.Enabled = checkBox3.Checked;
}
foreach (Control myChild in myControl.Controls)
DisableMessageControls(myChild);
}