2011-01-06 24 views
1

我正在創建複雜的UserControl,應用程序在創建模式期間部分顯示它令我感到惱怒。
意味着最終用戶可以看到所有創建/拉伸工藝(有延遲出現放在這個用戶控件控制,梯度箱吸取他們填寫等)如何僅在完全創建時顯示控件(.NET)

我敢肯定有一些命令隱藏這個過程中,只顯示控制當它完全繪製 ...

有人可以建議如何存檔嗎?

回答

1

MHH我不認爲存在的東西完全一樣,但也有這些東西:

  • SuspendLayout(這你想要做什麼,不顯示拉絲工藝,ResumeLayout顯示佈局變化)
  • 可見(你可以在繪製控件時改變它)
  • Paint事件

你也可以調用invalidate(其中FO形式的RCE重繪)

這適用於初始化相當不錯,但如果你希望每次控制塗或僅創建

時不過,我沒有時間也我不明白關於如何攔截「繪圖前」和「繪圖後」的想法(繪圖,我認爲它在繪圖之前觸發,不確定)

+0

Re SuspendLayout - 在什麼控制我會解僱?在父母或目前正在創建 – Maciej 2011-01-06 02:49:42

+0

我已經存檔與可見性的組合 - 現在好多了!謝謝 – Maciej 2011-01-06 03:30:06

+0

什麼,順便說一句SuspendLayout應該被稱爲「你的控制包含很多控制」,如果父母被暫停,所有孩子都被暫停 – 2011-01-06 03:59:24

3

確保您的UserControl已被標記爲雙緩衝。這確保了當用戶控件的客戶區需要繪製時,它會在離屏緩衝區中完成,然後在完成時將其傳送到屏幕。這使它成爲原子,並且在發生時不應該看到繪圖操作。要添加此使用您的UserControl構造函數中的以下內容...

 SetStyle(ControlStyles.OptimizedDoubleBuffer | 
       ControlStyles.AllPaintingInWmPaint | 
       ControlStyles.UserPaint, true); 
+0

更好,但仍然可以看到這種延遲繪畫效果......任何建議? – Maciej 2011-01-06 03:03:01

+1

如果您的UserControl包含其他控件,那麼它們也需要執行雙緩衝。 – 2011-01-06 08:00:12

+0

@Maciej:看他的評論,很重要。我發現他的建議比我的更有用,可能會讓你無法用代碼 – 2011-01-06 14:24:16

相關問題