Dot-Net

Form_Load() ‘事件’ 或覆蓋 OnLoad()

  • September 8, 2010

我希望有人嘗試解釋這些之間的區別。更具體地說,範例使用場景。

我正在重構一些Windows 窗體程式碼,並且在事件中以及在呼叫Now 我跟踪它的事件Form中有一些程式碼, 並且 Override 首先觸發,然後立即觸發事件版本。Form_Load()``protected override void OnLoad()``base.OnLoad(e);

那麼,通常使用哪一種,為什麼?

您應該始終覆蓋 OnLoad()。僅當另一個班級對該事件感興趣時,才適合使用該事件。這就是事件的用途。另一個對 Load 事件感興趣的類非常少見,只有在做視窗佈置時才真正有用。

儘管如此,Load 事件與設計器配合得很好,並且 VB6 程序員對此非常滿意。這並不是大錯特錯,只有當您開始繼承表單並且程式碼沒有以正確的順序執行時,您才會遇到麻煩。

現在放入 Load 事件的大多數程式碼確實屬於建構子。僅在以下情況下才需要 OnLoad:

  • 您需要知道視窗的確切大小和位置。OnLoad 是最好的,創建視窗句柄並應用使用者首選項(標題和邊框大小),並按照 Form.AutoScaleMode 屬性的指示重新調整表單。視窗尚不可見,這是將視窗移動到其他位置或安排子控制項的好時機。
  • 您有需要 Handle 屬性的程式碼。這是微妙的,你不能總是說出來。在建構子中有這樣的程式碼是不健康的,視窗是在建構子完成之前創建的。它通常會有一個好的結果,但它會使創建表單變得非常緩慢。從呼叫堆棧視窗易於診斷。
  • 避免 MDI 實現中的錯誤。如果您在父建構子中創建一個 MDI 子代,那麼您將獲得重複的字形,當您最大化該子代時可見。而是在 OnLoad 中創建孩子。

引用自:https://stackoverflow.com/questions/3670806