2 回答

TA貢獻1825條經驗 獲得超6個贊
使用VB6的程序員傾向于在Load事件中放入很多代碼,在VB6中,該事件用于初始化表單。但這在Windows窗體中不再合適,Form類可以具有構造函數。.NET的方法是在構造函數中初始化類對象,對于Form類,很少有理由不這樣做。
Load事件在創建窗體的窗口句柄之后,就在用戶可見之前立即運行。您僅應在事件處理程序中編寫依賴于已創建句柄的代碼。除了一種以外,沒有多少代碼可以滿足此要求:需要知道窗口大小和位置的代碼。
當窗體在另一臺計算機上運行時,窗體的設計時“大小”和“位置”屬性值與實際值不同。表單可以重新縮放以適應目標計算機上的系統字體大小或視頻適配器DPI設置。用戶首選項也起著作用,用戶可能為窗口標題選擇了不同的字體大小。除非您希望窗口在桌面上具有特定位置或與其他窗口對齊,否則您通常不會在乎這些。
在Load事件中編寫代碼(執行諸如初始化TreeView或ListView控件之類的操作)實際上會大大減慢啟動時間。在構造函數中執行此操作時,Windows Forms不必更新物理窗口,但尚未創建。創建本機控件后,Winforms會使用批量更新而不是一次加載一個節點/項來對其進行初始化,就像在Load事件中運行代碼時那樣。巨大差距。
最后但并非最不重要的一點:永遠不要使用Load事件,而應重寫OnLoad()方法。當您(或其他人)從Form類繼承時,這可確保代碼以可預測的順序運行。IntelliSense可幫助您編寫此方法,只需鍵入“ protected onl”并按Tab鍵即可讓IntelliSense自動完成該方法。請注意,您如何選擇將代碼放在base.OnLoad()調用之前或之后,這就是您控制誰是老板的方式。當您把它放在首位后,您就是老板,但通常并沒有正確的選擇。

TA貢獻1772條經驗 獲得超6個贊
快速查看在Windows窗體中使用構造函數以確保正確的初始化
在Windows窗體中使用構造函數,以確保正確完成了初始化。事件觸發順序并不是一門精確的科學,無論您過去看到什么,您都不能始終依賴于事件觸發的順序。
....
因此,Microsoft建議您在Forms構造函數中處理初始化代碼,假設您沒有真正耗時的初始化,而該初始化可能會進行時間分割或執行DoEvents()。
- 2 回答
- 0 關注
- 470 瀏覽
添加回答
舉報