线条只有在控件移动到它上面后才会被绘制

本文关键字:绘制 移动 控件 | 更新日期: 2023-09-27 18:01:27

我有一组自定义控件和一个几何对象列表,我需要在同一个手柄上绘制。

我覆盖OnPaint过程,将base.OnPaint(e)放在第一行,并开始绘制几何对象(通过e.Graphics.DrawLine等)。它们在锁定列表中,并且在一段时间后衰变。此外,自定义控件可以在窗口周围移动。

现在这几乎可以正常工作了,除了这个有趣的事实:

几何形状只有在控件沿着/在其布局上方移动后才会出现

我能够在一个小环境中复制这个:PASTEBIN

我尝试刷新图形对象;保存/恢复;改变剪辑。

我猜区域只有在控件存在时才会失效并重新绘制。但是我怎样才能强迫它们被画出来呢?

线条只有在控件移动到它上面后才会被绘制

控件。Invalidate将告诉框架控件需要重新绘制。它会自动重新绘制控件,例如,鼠标遮挡了它的一部分,但它只会重新绘制鼠标覆盖的一小部分(因此你最终会得到"(重新)用鼠标绘制"的效果。另外,移动一个窗口将强制它重新绘制,就像用另一个窗口覆盖它然后再次移动该窗口一样。

但是如果你正在做一堆自定义绘画,你需要让它知道需要通过调用Invalidate自己重新绘制控件。