为什么这样做?
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;
}
}
}
我认为compliler会在每次按下按钮时读取这些行,所以在两个if语句之后不会有任何不同。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}
答案 2 :(得分: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
来改变逻辑流程,因此您一次只处理1个场景(它是红色或蓝色)。但是,在第二个中,因为它们是两个单独的语句,所以您将连续处理这两个方案。对此有几个解决方案,最明显的(也可能是最好的)是像你已经使用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)
答案 3 :(得分: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);
}
答案 4 :(得分:0)
如果您要使用 2个或更多单独的IF语句,则会执行所有IF语句。
如果使用 IF ELSE或SWITCH ,则将执行该序列中的任何一个。
您必须使用哪种类型的陈述来决定。