[英]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.