如何在不断变化的背景上画圆圈

时间:2009-04-10 16:40:12

标签: c# .net winforms graphics timer

表单上有一个计时器,在我的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);

问题在于每个刻度线上的背景更改,我在表单上看不到圆圈。

3 个答案:

答案 0 :(得分:2)

您应该做的是将代码放在表单Paint事件中。这将导致您的代码重绘表单必须重绘的时间。就像在表单上运行鼠标或移动表单一样。你在哪里宣布你的图形对象?因为在您的表单上绘制它的唯一方法是:

Graphics g = this.CreateGraphics();

如果使用paint事件,则甚至不需要计时器对象。

答案 1 :(得分:0)

您应该将此代码与正在更改背景的相同tick事件相结合。否则,你实际上会有一个竞争条件,即首先要点击“tick”。将它们结合起来可以解决这个问题。

答案 2 :(得分:0)

同时更新背景和前景的建议是可靠的。

如果你无法控制它,也许你可以在窗口的背景上添加一个透明控件,并绘制到透明控件上?这样你就永远在Z-Order中。这也会减少您定期重绘的需要。