C# 背景颜色改变

3

我刚开始在大学里学习C#,现在遇到一个问题。我需要使用if语句来实现点击一个按钮时改变背景颜色的效果。我的代码如下:

BackColor = Color.Red;
if ( BackColor == Color.Red)
{
    BackColor = Color.Blue;
}
if (BackColor == Color.Blue)
{
    BackColor = Color.Green;
}

问题是背景颜色立即变成绿色... 我该怎么做才能使它在三种颜色之间变化?如果问题很愚蠢,请原谅。


1
@MichaelMontero 这有什么关系吗? - Rotem
2
你缺少一个 else,而且你不应该总是从红色开始,否则就没有任何变化了。对于动画,请使用计时器或者(呃)让应用程序等待。 - TaW
1
将你的 if...if 改为 if...else if。如果这是一个方法,条件满足后立即返回。 - NoviceProgrammer
抱歉,如果问题很蠢的话。我的一位老师曾经说过:“你不问的那些问题才是愚蠢的问题。” - Fildor
你应该学习调试和逐步执行代码,这将在未来帮助你很多。例如,如果你知道如何调试,你可以轻松地自己解决这个问题。 - Selman Genç
3个回答

9
你需要理解if条件语句。第一个if的结果是true,因为你刚刚将Color.Red赋值给了BackColor,然后第二个if也是true,因为你刚刚将Color.Blue赋值给了它。
此外,如果你用Color.Red初始化BackColor,那么第一个if将始终为真,因此以这种方式会得到Blue。我想你想做的是:
 if (BackColor == Color.Green) 
 {
     BackColor = Color.Red;
 }
 else if (BackColor == Color.Red)
 {
     BackColor = Color.Blue;
 }
 else if (BackColor == Color.Blue)
 {
     BackColor = Color.Green;
 }

我建议您阅读更多关于if条件的内容。此外,就像Rotem建议的那样,请了解switch的相关知识。

2
在这种情况下,可以考虑使用switch语句更加简洁。 - Rotem
我写了这段代码: BackColor = Color.Green; if (BackColor == Color.Green) { BackColor = Color.Red; } else if (BackColor == Color.Red) { BackColor = Color.Blue; } else if (BackColor == Color.Blue) { BackColor = Color.Green; } 但是它没有起作用... - Denislav Gavrilov
@DenislavGavrilov 现在每当你运行这段代码时,它都会是红色的。你需要在其他地方将其初始化为 Color.Green。不要在此代码块中进行初始化。也许可以尝试使用构造函数来执行 BackColor = Color.Green; - sertsedat
是的,我做到了。非常感谢你。我会考虑阅读关于“开关(switch)”以及更多有关“if语句”的内容。 - Denislav Gavrilov
@Rotem:确实,问题在于像Color.Red这样的颜色属性不是常量。 - Tim Schmelter
显示剩余2条评论

1
仅适用于“if”不是必需的情况:
class xyz{
    private Color[] myColors = new Color[]{ Color.Red, Color.Blue, Color.Green }
    private int colorIndex = 0;

    // BackColor also declared somewhere here ...

    private void clickHandler( object sender, EventArgs e )
    {
         colorIndex = (++colorIndex)%myColors.length; 
         // ++ColorIndex is short for colorIndex = colorIndex + 1
         // % - "Remainder" => when colorIndex is 3 then 3 % 3 ( Remainder of 3 / 3 ) = 0
         // So this will increment on each click and "reset to 0" on 3, so you stay in bounds.
         BackColor = myColors[ colorIndex ];
    }
}

0
将此代码放入构造函数中。
BackColor = Color.Green;

把这个放在onclick方法中

if (BackColor == Color.Green) 
{
    BackColor = Color.Red; 
} 
else if (BackColor == Color.Red)
{
    BackColor = Color.Blue;
} 
else if (BackColor == Color.Blue)
{ 
    BackColor = Color.Green; 
}

那应该对你有用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接