【发布时间】:2016-10-25 20:01:05
【问题描述】:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush brush = new SolidBrush(Color.Black);
g.FillRectangle(brush, 35, 30, 140, 420);
if (figure.Equals("red"))
{
brush.Color = Color.Red;
g.FillEllipse(brush, 35, 30, 140, 140);
figure = "red";
}
else if (figure.Equals("yellow"))
{
brush.Color = Color.Yellow;
g.FillEllipse(brush, 35, 170, 140, 140);
figure = "yellow";
}
else if (figure.Equals("green"))
{
brush.Color = Color.ForestGreen;
g.FillEllipse(brush, 35, 310, 140, 140);
figure = "green";
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (figure.Equals("red"))
{
System.Threading.Thread.Sleep(750);
figure = "yellow";
Invalidate();
System.Threading.Thread.Sleep(750);
figure = "green";
Invalidate();
}
else if (figure.Equals("green"))
{
System.Threading.Thread.Sleep(750);
figure = "yellow";
Invalidate();
System.Threading.Thread.Sleep(750);
figure = "red";
Invalidate();
}
}
我正在编写一个简单的交通信号灯,并认为如果您可以按一次“切换”按钮并从红色变为黄色再变为绿色,而不是每次都按下它会更好看。但是,现在当我运行程序时,不是等待 0.75 秒来绘制黄色,然后再等待 0.75 秒来绘制绿色,而是等待 1.5 秒并直接从红色变为绿色,而不是显示黄色完全没有。
【问题讨论】:
-
您是否尝试在 Invalidate 后调用 Update 和 Refresh ?