c# form函式 在Form Constructors和Form Load事件中應該使用哪些設置代碼?




c# form text (2)

對於winforms應用程序,我想知道應該使用什麼設置代碼:

  • MainForm的()

而不是

  • MainForm_Load(對象發送者,EventArgs e)

這裡有最佳實踐指南嗎?


Answer #1

快速查看Windows窗體中的“ 使用構造函數”以確保正確初始化

使用Windows窗體中的構造函數確保正確完成初始化。 事件發射順序並不是一門精確的科學,你不能總是依賴於事件觸發的順序,無論你過去看過什麼。

....

因此,Microsoft建議您在Forms構造函數中處理初始化代碼,假設您沒有真正耗時的初始化可以獲得時間片或執行DoEvents()。


Answer #2

使用VB6的程序員傾向於在Load事件中放入大量代碼,在VB6中該事件用於初始化表單。 但是這在Windows窗體中不再合適,Form類可以有一個構造函數。 .NET方法是在構造函數中初始化類對象,對於Form類,沒有很少的令人信服的理由不這樣做。

Load事件在創建窗體的窗口句柄之後立即運行,就在它對用戶可見之前。 您應該只在依賴於創建句柄的事件處理程序中編寫代碼。 除了一種類型之外,沒有一大堆符合此要求的代碼:需要知道窗口大小和位置的代碼。

當表單在另一台機器上運行時,Form的設計時Size和Location屬性值與它們的實際值不同。 可以重新調整表單以適應目標計算機上的系統字體大小或視頻適配器DPI設置。 用戶首選項也起作用,用戶可能為窗口標題選擇了不同的字體大小。 除非您希望窗口在桌面上具有特定位置或與其他窗口對齊,否則您通常不關心這些內容。

在Load事件中編寫代碼來執行初始化TreeView或ListView控件等操作實際上可以大大減慢啟動時間。 當您在構造函數中執行此操作時,Windows窗體不必更新物理窗口,它尚未創建。 一旦創建了本機控件,Winforms就會使用批量更新而不是一次一個節點/項來初始化它,就像代碼在Load事件中運行時一樣。 巨大差距。

最後但並非最不重要的:您永遠不應該使用Load事件,您應該覆蓋OnLoad()方法。 當您(或其他人)從Form類繼承時,這可確保代碼以可預測的順序運行。 IntelliSense可幫助您編寫此方法,只需鍵入“protected onl”並按Tab鍵即可使IntelliSense自動完成該方法。 注意你可以選擇在base.OnLoad()調用之前或之後放置代碼,這就是你如何控制誰是老闆。 當你把它放在後面時你是老闆,而不是經常正確選擇btw。





onload-event