2012-11-04 45 views
1

可能重複:
How do I suspend painting for a control and its children?
Winforms Double Buffering防止油漆被調用一次以上

我有繪製一堆用戶定義的控制(其中81)每一個形式其中包含另外十個控件(總計8,100 ish)。它似乎都是按順序繪製的(需要大約1秒左右)。

我已經看了thesetwo問題,跟着IER建議步驟(窗體和自定義的控制,並SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);表格上設置this.DoubleBuffered = true,但這似乎沒有做任何事情。

是有一種方法可以保存表單的繪畫功能,將其保存在委託中,交換虛擬函數,以便表單不會重新繪製AT ALL,然後將實際功能恢復並觸發。

I假設有一個更標準的方法來做到這一點,但我無法找到它(它不是SuspendLayout/ResumeLayout那些只處理佈局邏輯)。

我該怎麼做?

+1

@HansPassant這有什麼好做一點。它完美地繪製,只是緩慢。此外,它並不試圖暫停表單的繪製。我是。這兩個問題如何相關? – soandos

+0

自己幫忙將代碼複製/粘貼到表單中需要30秒。 –

+0

@HansPassant它現在渲染大的黑色方塊,然後立即填充它們(仍然需要大約一秒)。這是否意味着創建所有這些控件需要花費太多時間?我怎麼能衡量這一點? – soandos

回答

1

這就是答案:(a link)。

但想一想。如果您阻止Paint發生,您的UI控件在用戶與它們交互時應該如何更新?將沒有按鈕發光,沒有文本框光標閃爍等。

如果你是好與那爲什麼你只是不RenderToBitmap爲背景圖像的用戶控件的容器?..