C# 如何在变化的背景上画圆

C# 如何在变化的背景上画圆,c#,.net,winforms,graphics,timer,C#,.net,Winforms,Graphics,Timer,表单上有一个计时器,在其滴答事件中,我: this.BackColor = ColorTranslator.FromHtml("#" + ColorCodesBack[_index]); CurrentColor = ColorTranslator.FromHtml("#" + ColorCodesFore[_index]); SolidBrush sb = new SolidBrush(CurrentColor); g.Fil

表单上有一个计时器,在其滴答事件中,我:

        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);

问题是每个勾号的背景都发生了变化,我在表单上没有看到一个圆圈。

您应该将此代码与改变背景的同一个勾号事件结合起来。否则,您实际上有一个关于哪个“勾号”将首先被触发的竞争条件。将它们结合起来将解决这个问题。

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


如果你不能控制它,也许你可以在背景上的窗口中添加一个透明控件,然后在透明控件上画图?那样的话,你将永远在Z顺序的上面。这也会减少您定期重新绘制的需要。

您应该做的是将代码放入表单绘制事件中。这将导致您的代码在表单需要重新绘制时重新绘制。比如在窗体上运行鼠标或移动窗体。另外,您在哪里声明图形对象?因为在您的表格上绘制的唯一方法是:

Graphics g = this.CreateGraphics();

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

它们已经处于相同的刻度。第一行是改变背景。我试着在面板上画圆圈。但是它不起作用。。你有一个在透明控件上画圆的代码示例吗?谢谢,我已经想到了,你是对的,我应该把这个代码放到Paint事件中。