web-dev-qa-db-ja.com

フォームコンストラクターとForm_Load

フォームコンストラクタとform_Loadメソッドの違いは何ですか?

アイテムをどちらか一方に配置するための思考プロセスは何ですか?

34
Ryan

コンストラクター内のコードは、フォームを作成すると、表示するかどうかに関係なく、すぐに実行されます。 Form.Loadイベントで実行されるコードはイベントハンドラーであるため、実際に他のクラス(フォームにサブスクライブしているクラス)でコードを実行できます。同様に、(フォームから) Form.OnLoadメソッド を使用してコードを実行できます。

フォームが初期化された後で、フォームのLoadイベント(およびOnLoadオーバーライド可能なメソッド(多くの場合、フォーム自体でより適切な選択))が実行されます。フォームのすべてのコントロールが既に構築されているため、これには多くの場合利点があり、さらに重要なことに、すべてのフォームレイアウトが発生します。

21
Reed Copsey

Loadイベントを使用しないで、OnLoad()メソッドをオーバーライドします。これにより、フォームクラスから派生したときに、すべてが予測可能な順序で実行されます。実際のフォームのサイズを知る必要があるフォームの初期化にのみ使用してください。スケーリングやユーザー設定により、デザインサイズと異なる場合があります。実際のサイズは、ネイティブウィンドウが作成されるまでわかりません。

OnLoadメソッドでコントロールを初期化することは可能ですが、特にListViewとTreeViewの場合、非常に遅くなる可能性があります。コンストラクターでそれらを初期化すると、ネイティブのWindowsコントロールが作成されたときに一括初期化できます。

1つの特別な例外:MDI子ウィンドウの作成は常にOnLoad()で行う必要があります。MDIコンストラクタで子を作成します。

29
Hans Passant