表单上有一个计时器,在我的Tick事件中我有:
this.BackColor = ColorTranslator.FromHtml("#" + ColorCodesBack[_index]);
CurrentColor = ColorTranslator.FromHtml("#" + ColorCodesFore[_index]);
SolidBrush sb = new SolidBrush(CurrentColor);
g.FillEllipse(sb, this.Width/2 -200, this.Height/2 - 200, 200, 200);
g.DrawImage(b, 150, 150);
问题在于每个刻度线上的背景更改,我在表单上看不到圆圈。
答案 0 :(得分:2)
您应该做的是将代码放在表单Paint事件中。这将导致您的代码重绘表单必须重绘的时间。就像在表单上运行鼠标或移动表单一样。你在哪里宣布你的图形对象?因为在您的表单上绘制它的唯一方法是:
Graphics g = this.CreateGraphics();
如果使用paint事件,则甚至不需要计时器对象。
答案 1 :(得分:0)
您应该将此代码与正在更改背景的相同tick事件相结合。否则,你实际上会有一个竞争条件,即首先要点击“tick”。将它们结合起来可以解决这个问题。
答案 2 :(得分:0)
同时更新背景和前景的建议是可靠的。
如果你无法控制它,也许你可以在窗口的背景上添加一个透明控件,并绘制到透明控件上?这样你就永远在Z-Order中。这也会减少您定期重绘的需要。