我对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);
}
}
}
答案 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.
}
现在,每次点击时颜色都会略有变化。