2012-11-06 43 views
1

我有一個.net 4.0 winforms項目,我需要以編程方式設置一個窗口(System.Windows.Forms.Form)的邊界(又名大小),並添加/刪除控件/同時,沒有可見閃爍。該表單不是用戶可調整大小的,其大小更改的唯一位置是this.Bounds = foo/this.DesktopBounds = foo/...調用。如何防止在編程調整大小時重新繪製託管winform?

我已經閱讀了關於通過使用p/invoke發送WM_SETREDRAW以及關於SuspendRedraw/SuspendLayout和朋友來防止閃爍。我仍然看到閃爍發生,並將該問題確定下來:

即使禁用重繪,Windows也會在設置其邊界/大小時重新繪製窗體。

我想這不是由窗體本身引起的,而是由窗口管理器以某種方式引起的?

那麼 - 有沒有一種方法可以絕對防止在任何情況下重新繪製任何東西,然後在以後手動重新啓用重繪和刷新?種類「凍結窗口並顯示快照」,更改內容,以及「用1更新窗口(包括位置和大小)更換快照」?

謝謝,歡呼聲, 添

回答

0

使用形式的ResizeRedraw財產。將其設置爲false。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resizeredraw.aspx

您還需要手動後重繪窗口。

+0

謝謝!不幸的是我已經嘗試過這個屬性(在OP中忘記提及)。我可能還需要補充說我正在使用DevExpress組件;他們重寫窗體(XtraForm) - 可能是問題的一部分(他們以某種方式覆蓋SuspendDraw/ResizeRedraw/...屬性)? –

相關問題