C#使用Button更改Form的背景颜色

时间:2017-11-04 17:58:54

标签: c# .net winforms

我对C#书中的代码有一个简单的问题。每次单击按钮时,代码都会改变背景颜色。问题是它将颜色变为绿色并立即再次变为紫色。再次点击后,情况和颜色保持不变。我认为Application.DeEvents()存在问题,因为似乎在一次迭代后,参数恢复为默认值。这显然是一本书的错,但无论如何我想让它成功。我发现了一个关于相同代码的问题,但它是关于for循环的,并不是说代码为什么不能在第一时间起作用。

    {
        for (int c = 0; c < 254 && Visible; c++)
        {
            this.BackColor = Color.FromArgb(c, 255 - c, c);
            Application.DoEvents();
            System.Threading.Thread.Sleep(5);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

254次迭代持续254 * 5 ms = 1.27秒。所以,点击后你就得到RGB(0,255,0)==绿色。然后循环在1.27秒内逐渐将颜色逐渐变为RGB(253,2,253)`==紫色。这是你的代码告诉它做的事情。

另请注意,5 ms短于60Hz(~16.7 ms)的显示器刷新率。

如果要逐渐手动而不是自动更改颜色,请移除循环并将c存储在字段中(方法外部)。

private int c = 0;

private void Button1_Click(object sender, EventArgs e)
{
    this.BackColor = Color.FromArgb(c, 255 - c, c);
    c = (c + 1) % 256; // 256 % 256 == 0. % = modulo operator.
}

现在,每次点击时颜色都会略有变化。