3

在此处输入图像描述

为什么这行得通?

    private void button1_Click(object sender, EventArgs e)
    {
        if (!checkBox1.Checked)
        {
            MessageBox.Show("The box is not checked!");
        }
        if (checkBox1.Checked == true)
        {
            if (label1.BackColor == Color.Red)
            {
                label1.BackColor = Color.Blue;
            }
            else
            {
                label1.BackColor = Color.Red;
            }
        }
    }

但这不是吗?

   private void button1_Click(object sender, EventArgs e)
    {
        if (!checkBox1.Checked)
        {
            MessageBox.Show("The box is not checked!");
        }
        if (checkBox1.Checked == true)
        {
            if (label1.BackColor == Color.Red)
            {
                label1.BackColor = Color.Blue;
            }
            if (label1.BackColor == Color.Blue)
            {
                label1.BackColor = Color.Red;
            }
        }
    }

我认为编译器会在我每次按下按钮时读取这些行,因此两个 if 语句相继出现应该没有什么不同。

4

5 回答 5

6

如果它是红色的,您将更改为蓝色,如果它是蓝色,则将其更改为红色。基本上首先,如果第一个if将其更改为蓝色,然后第二个if将其更改回红色。它是这样工作的,因为指令是按顺序执行的,所以你的第二个if总是在你的第一个之后检查if。如果第一个被解雇,只需使用else if第二个if就行不通:

// if red then change to blue
if (label1.BackColor == Color.Red)
{
    label1.BackColor = Color.Blue;
}
// otherwise, if blue then change to red
// this condition will be checked if first "if" was false
else if (label1.BackColor == Color.Blue)
{
    label1.BackColor = Color.Red;
}
于 2013-04-27T11:57:27.217 回答
3

为什么第二个片段不起作用。

因为在第二个片段中,两个if语句都是独立的。颜色从第一个变为蓝色后if,第二个if被调用并将其颜色变回红色。你需要一个else if

        if (label1.BackColor == Color.Red)
        {
            label1.BackColor = Color.Blue;
        }
        else if (label1.BackColor == Color.Blue)
        {
            label1.BackColor = Color.Red;
        }
于 2013-04-27T12:01:12.643 回答
2

这是一个逻辑问题,下面是一个为什么它不起作用的例子:

// label is blue at this point
if (label1.BackColor == Color.Blue)
{
    // we change the colour to red
}
// label is red at this point
if (label1.BackColor == Color.Red)
{
    // we change it back to blue
}

语句之间的区别在于第一次使用else会改变逻辑流程,因此您一次只能处理一个场景(它是红色或蓝色)。但是,在第二个中,因为它们是 2 个单独的语句,您正在连续处理这两种情况。对此有几个解决方案,最明显的(可能也是最好的)是使用else您已经使用的方法。但是,您也可以使用switch

switch (label1.BackColor)
{
    case Color.Blue:
        label1.BackColor = Color.Red;
        break;
    case Color.Red:
        label1.BackColor = Color.Blue;
        break;
}

您也可以保留第二个代码段中的代码,但只需使用return关键字告诉您已完成的功能,例如

if (label1.BackColor == Color.Blue)
{
    // change to red
    return;
}

或者,如果您想要真正花哨,您实际上可以完全重构该if语句并在一个衬里中执行它 - 虽然看起来很丑......

label1.BackColor = checkbox1.Checked ? label1.BackColor = Color.Blue ? Color.Red : Color.Blue : label1.BackColor

仅供参考 -if (checkbox1.Checked == true)是一个毫无意义的检查,只需使用if (checkbox1.Checked)

于 2013-04-27T12:08:48.140 回答
0
private void button1_Click(object sender, EventArgs e)
{
    if (!checkBox1.Checked)
        MessageBox.Show("The box is not checked!");
    else
       label1.BackColor = (label1.BackColor == Color.Red ? Color.Blue : Color.Red);
}
于 2013-04-27T12:04:18.900 回答
0

如果您要放置2 个或更多单独的 IF 语句,则所有 IF 语句都将被执行。

如果您使用IF ELSE 或 SWITCH,则将执行该序列中的任何一个。

应该使用什么类型的语句,你必须决定它。

于 2013-04-27T12:43:09.163 回答