2012-01-08 59 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使用的應用程序繪製