【问题标题】:C# back color changeC#返回颜色变化
【发布时间】:2018-09-03 20:56:15
【问题描述】:

我刚开始在大学学习 C#,但遇到了一些问题。当我单击一个带有 if 语句的按钮时,我需要更改背景颜色。我的代码是这样的:

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

问题是背面颜色立即变为绿色..我应该怎么做才能使它变成三种颜色?对不起,如果问题很愚蠢。

【问题讨论】:

  • @MichaelMontero 为什么重要?
  • 你缺少一个else,你不应该总是以红色开头,否则永远不会有任何变化。对于动画,使用计时器或 (arrgh) 让应用程序等待..
  • 将您的 if...if 更改为 if...else if。或者如果这是一个方法,则在满足条件后立即返回..
  • “对不起,如果问题很愚蠢。” - 我的一位老师总是说:“愚蠢的问题是你不问的问题。”
  • 你应该学习调试和单步调试代码,这对你以后会有很大帮助。例如,如果您知道如何调试,您可以自己轻松解决此问题。

标签: c#


【解决方案1】:

您需要了解if conditions。第一个 if 的计算结果为 true,因为您刚刚将 Color.Red 分配给了 BackColor,然后第二个 if 也为真,因为您刚刚将 Color.Blue 分配给了它。

另外,如果你用Color.Red 初始化BackColor,第一个总是正确的,所以它将是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 conditions 的更多信息。另外,就像 Rotem 建议的那样,也请检查switch

【讨论】:

  • 在这种情况下可以考虑使用switch 子句。
  • 我这样做了: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; } 并且它不起作用..
  • @DenislavGavrilov 现在无论何时运行此代码,它都会显示为红色。您需要在其他地方将其初始化为Color.Green。不在此代码块中。也许尝试构造函数来做BackColor = Color.Green;
  • 是的,我做到了。非常感谢。我会考虑阅读“switch”以及更多关于 if 语句的内容。
  • @Rotem:确实,问题在于像Color.Red 这样的颜色属性不是常量
【解决方案2】:

仅适用于非强制使用“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 ];
    }
}

【讨论】:

    【解决方案3】:

    把这个放在构造函数中

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

    这应该适合你

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 2013-11-26
      • 2011-04-12
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多