多条件if语句

时间:2011-05-21 06:44:57

标签: c# controls

我可以发誓我知道如何做到这一点......无论如何,我想检查控件是否与其他两个控件的名称相匹配。如果它匹配控件名称的 ,我希望它能够中止“任务”。

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);

        }

4 个答案:

答案 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)

用英语阅读它可以提供帮助 你拥有的是:
如果myControl.Name不等于checkbox3.name或不等于panel7.name
你想要的是:
如果myControl.Name不等于checkbox3.name或等于panel7.name

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);

}