Мульти-условный оператор if - PullRequest
0 голосов
/ 21 мая 2011

Я мог бы поклясться, что знал, как это сделать ... независимо от того, я хочу проверить, совпадает ли элемент управления с именем двух других элементов управления.Если он соответствует или имен элемента управления, я хочу, чтобы он прервал «миссию», если хотите.

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 ]

4 голосов
/ 21 мая 2011

У тебя есть ||в сочетании с отрицательными условиями.Это все равно что сказать: «Если меня зовут не Джон или , это не Джефф".Ну, это не может быть и то и другое, поэтому это условие всегда будет верным.Я подозреваю, что вы действительно хотите:

// 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.

2 голосов
/ 21 мая 2011

Ваш оператор if всегда будет возвращать true (при условии, что checkBox3 и panel7 имеют разные имена).

Я думаю, что вы хотите, это одно из:

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

или

if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))
0 голосов
/ 21 мая 2011

Вот что я использовал в итоге:

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

}
0 голосов
/ 21 мая 2011

чтение на английском может помочь что у вас есть:
если myControl.Name не равно checkbox3.name или не равно panel7.name
что вы хотите:
если myControl.Name не равно checkbox3.name или равно panel7.name

if (!(myControl.Name == checkBox3.Name || myControl.Name == panel7.Name))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...