我有一个问题:我的应用程序需要在面板上绘制一些图像。如何在面板上绘制图像而无需重新绘制?
我使它在Paint(..)事件上。
但是,如果我移动应用程序窗口然后窗体和所有控件将重画。
我该如何摆脱它? 可能是我应该改变事件为paiting? 我试图绘制Load(..)事件,但应用程序没有以这种方式绘制到面板中。
我有一个问题:我的应用程序需要在面板上绘制一些图像。如何在面板上绘制图像而无需重新绘制?
我使它在Paint(..)事件上。
但是,如果我移动应用程序窗口然后窗体和所有控件将重画。
我该如何摆脱它? 可能是我应该改变事件为paiting? 我试图绘制Load(..)事件,但应用程序没有以这种方式绘制到面板中。
只有部分。因此,无论以前看不到的部分是否被揭开(通过移动该窗口或上方的窗口,或调整大小,最小化/最大化等),缺少的部分都需要重新绘制,这就是您所看到的。
如果你不能只重绘部分,可以例如使用位图和PictureBox
缓存绘制的数据,以便重绘窗口只需要位图被转移到屏幕上,而无需实际重绘位图的内容。
在这种情况下,您将自己的东西绘制到位图画布而不是表单画布。
请告诉我,我应该如何在画布上绘画并将其设置为PictureBox或Panel? – user1134602 2012-01-08 11:35:09
创建一个“位图”,在该位图上创建一个“Graphics”对象,在其上绘制,将位图分配给“PictureBox”。不要忘记妥善处理'Graphics'对象(最好用'using'语句完成)。 – Lucero 2012-01-08 11:37:42
非常感谢。 – user1134602 2012-01-08 12:01:38
你不能摆脱Repaint()
,因为这是基本的OS
函数。
伊莫,你担心在调整大小后翻转。要解决这个问题,你可以在my answer提供。
您可以使用Pictureboxes
,而不是把他们拉的,并顺便说一下,不要忘了让double buffering使用的应用程序绘制
为什么你的界面被重新绘制是一件坏事? – ZippyV 2012-01-08 11:12:20
这并不坏,但我的屏幕闪烁 – user1134602 2012-01-08 11:33:33
像Tigran说的那样在你的表单上设置'DoubleBuffered'属性。 – ZippyV 2012-01-08 11:36:18