C# 多条件if语句

C# 多条件if语句,c#,controls,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 != che

我可以发誓我知道怎么做。。。无论如何,我想检查一个控件是否与另外两个控件的名称匹配。如果它与控件的名称匹配,我希望它中止“任务”

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

        }

用英语读会有帮助 您拥有的是:
如果myControl.Name不等于checkbox3.Name或不等于panel7.Name
您想要的是:
如果myControl.Name不等于checkbox3.Name或等于panel7.Name

if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))

用英语读会有帮助 您拥有的是:
如果myControl.Name不等于checkbox3.Name或不等于panel7.Name
您想要的是:
如果myControl.Name不等于checkbox3.Name或等于panel7.Name

if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))

你已经把| |与负面条件结合起来了。这就像说,“如果我的名字不是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
主体的一部分。

您已经将| |与负面条件结合在一起。这就像说,“如果我的名字不是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
主体的一部分。

您的if语句将始终返回
true
(假设复选框3和panel7具有不同的名称)

我想你想要的是:

if (myControl.Name != checkBox3.Name && myControl.Name != panel7.Name)
或:


if语句将始终返回
true
(假设checkBox3和panel7具有不同的名称)

我想你想要的是:

if (myControl.Name != checkBox3.Name && myControl.Name != panel7.Name)
或:


以下是我最终使用的:

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

}

以下是我最终使用的:

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

}

那么,什么不起作用?您遇到了哪些错误/异常?是否要说
if(myControl.Name!=checkBox3.Name&&myControl.Name!=panel7.Name)
很抱歉,我没有指定。即使当前控件是checkbox3或panel7,它仍然在IF语句中运行其余的代码?您遇到了哪些错误/异常?是否要说
if(myControl.Name!=checkBox3.Name&&myControl.Name!=panel7.Name)
很抱歉,我没有指定。即使当前控件是checkbox3或panel7,它仍然运行IF语句中的其余代码。我感觉这些名称让我在这里遇到了一些麻烦。@Evan:不,不是-是糟糕的逻辑(使用| |和两个条件,这两个条件永远不会都是假的)。但是,如果你只是在识别精确的控件,那么使用这些名称似乎毫无意义。我有一种感觉,就是这些名称让我在这里遇到了一些麻烦。@Evan:不,不是-这是错误的逻辑(使用| |和两个决不会都是错误的条件)。但是,如果你只是为了识别准确的控件,那么使用这些名称似乎毫无意义。