2011-03-07 57 views
1

我有一個主窗口窗體,其中包含幾個用戶控件。這些用戶控件包含單個到多個控件。例如,我的一個用戶控件有30個複選框。特別是,當我在鼠標單擊事件期間將此特定用戶控件添加到主窗體時,表單變得非常慢,您可以看到每個組件都是逐個繪製的。當然,我不希望我的用戶看到。我讀了雙緩衝,並在我的用戶控件和我的解決方案中的所有其他控件中啓用此功能。但是,這似乎並沒有提高圖形處理速度。也許,我可以在form_load期間創建這個特定的用戶控件,並將其可見性更改爲false,然後當事件觸發時我可以將其設置爲true,但我確信有另一種方法可以解決此問題。如何在.NET中實現更平滑的GUI過渡?

任何想法?

+1

*用戶控件*中的30個複選框是可用性災難。在繪畫時看到它爬行並不重要,用戶無論如何都討厭它。檢查此:http://stackoverflow.com/questions/2255605/render-winforms-controls-more-smoothly/2258241#2258241 – 2011-03-07 14:28:35

+0

@Hans Passant:無論如何,你解決了我的問題。非常感謝你! – 2011-03-07 17:46:58

+0

我沒有解決用戶的問題。好吧。 – 2011-03-07 17:59:06

回答

4

例如,我的一個用戶控件有30個複選框。

是否所有這些複選框都需要同時顯示?這可能會提高生產力(並導致更好的設計),以便在不同的選項卡或甚至不同的表單之間分隔這些複選框。

+0

此外,與複選框或類似的列表視圖可能會有所幫助。 – bic 2011-03-07 14:08:19

+0

沒錯,絕對沒有理由選擇那麼多複選框。將它們拆分成不同的形式,或者用一個*單獨的*更合適的控件(比如'ComboBox')替換它們的整個區域。你也忘了提及控件需要時間來加載和渲染,可能比其他任何東西都要多。減少窗體/窗口上的控件數量可以使其更快地顯示在屏幕上,並允許在它出現時更快地操作它。 – 2011-03-07 14:13:57

+0

我同意你的看法,但30個複選框不應該是Windows應用程序的問題,即使我在這裏設計不好。其他應用程序如何在同時存在大量控件的情況下如此順利地運行? – 2011-03-07 14:30:04

0

我也遇到過這個問題,我的用戶控件是由多個標準控件組成的,其繪製速度非常緩慢。

令我驚訝的是,我發現在發佈模式下編譯比在調試模式下繪製時間快得多(且可接受)。

我願意去看看優化是否有所作爲。

0

如果30個複選框正在創建問題,那麼您可以將您的工作分配到不同的頁面上。而且頁面總是比窗口更快。因此,如果可以的話,您可以在2頁或3頁上分發30個複選框。

+0

30複選框不應該是Windows應用程序的問題。我錯了嗎? – 2011-03-07 14:32:37

0

打開DoubleBuffering。

並非所有控件允許它被直接設置,來解決這個子類的控制,並在構造函數中

+0

我目前已經完全像你說的那樣,但表現仍然很慢。 – 2011-03-07 14:31:55

0

設置DoubleBuffering作爲@Bic建議checkedListBox或帕拉姆碼事的伎倆。謝謝。