仅在Control移动之后才会绘制线条

时间:2014-05-02 17:03:17

标签: c# .net

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

我覆盖OnPaint程序,将base.OnPaint(e)放在第一行,然后开始绘制几何对象(通过e.Graphics.DrawLine等)。 这些都在锁定列表中并且在一段时间后衰退。 自定义控件也可以在窗口移动。

现在除了这个有趣的事实之外,这几乎按预期工作:

几何形状仅在控件沿其布局移动之后显示

我能够在一个小环境中重现这一点:PASTEBIN

我试过刷新图形对象;保存/恢复;改变剪辑。 似乎没什么用。

我猜测一旦控制存在,区域只会失效并重新绘制。但是我怎么能强迫他们被吸引呢?

1 个答案:

答案 0 :(得分:1)

Control.Invalidate将告诉框架需要重新绘制控件。它会自动执行此操作以重新绘制控件,例如,鼠标遮住了其中的一部分,但它只会重绘鼠标所覆盖的小部分(因此为什么最终会使用"(重新)绘制鼠标效果。同样移动一个窗口会强制它重绘,就像用另一个窗口覆盖它然后再移开那个窗口一样。

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