2012-01-08 60 views
0

我有一个问题:我的应用程序需要在面板上绘制一些图像。如何在面板上绘制图像而无需重新绘制?

我使它在Paint(..)事件上。

但是,如果我移动应用程序窗口然后窗体和所有控件将重画。

我该如何摆脱它? 可能是我应该改变事件为paiting? 我试图绘制Load(..)事件,但应用程序没有以这种方式绘制到面板中。

+1

为什么你的界面被重新绘制是一件坏事? – ZippyV 2012-01-08 11:12:20

+0

这并不坏,但我的屏幕闪烁 – user1134602 2012-01-08 11:33:33

+0

像Tigran说的那样在你的表单上设置'DoubleBuffered'属性。 – ZippyV 2012-01-08 11:36:18

回答

0

只有部分。因此,无论以前看不到的部分是否被揭开(通过移动该窗口或上方的窗口,或调整大小,最小化/最大化等),缺少的部分都需要重新绘制,这就是您所看到的。

如果你不能只重绘部分,可以例如使用位图和PictureBox缓存绘制的数据,以便重绘窗口只需要位图被转移到屏幕上,而无需实际重绘位图的内容。

在这种情况下,您将自己的东西绘制到位图画布而不是表单画布。

+0

请告诉我,我应该如何在画布上绘画并将其设置为PictureBox或Panel? – user1134602 2012-01-08 11:35:09

+0

创建一个“位图”,在该位图上创建一个“Graphics”对象,在其上绘制,将位图分配给“PictureBox”。不要忘记妥善处理'Graphics'对象(最好用'using'语句完成)。 – Lucero 2012-01-08 11:37:42

+0

非常感谢。 – user1134602 2012-01-08 12:01:38

0

你不能摆脱Repaint(),因为这是基本的OS函数。

伊莫,你担心在调整大小后翻转。要解决这个问题,你可以在my answer提供。

您可以使用Pictureboxes,而不是把他们拉的,并顺便说一下,不要忘了让double buffering使用的应用程序绘制