繁体   English   中英

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

[英]How-to draw a circle on a changing background

窗体上有一个计时器,在它的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);

问题是每个刻度上的背景都发生了变化,而我在窗体上看不到圆圈。

您应该做的是将代码放入Paint事件表单中。 每当表单需要重新绘制时,这都会导致您的代码重新绘制。 就像将鼠标移到表格上或移动表格一样。 另外,您在哪里声明图形对象? 因为将在表单上绘制的唯一方法是:

Graphics g = this.CreateGraphics();

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

您应将此代码与更改背景的相同滴答事件结合使用。 否则,您实际上将具有关于哪个“ as”将首先触发的竞赛条件。 将它们结合起来将解决该问题。

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

如果您无法控制它,也许可以在背景顶部的窗口中添加透明控件,然后绘制到透明控件上? 这样,您将始终位于Z顺序上方。 这也将减少您定期重绘的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM