40

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

一方と他方にアイテムを配置するためのあなたのプロセスは何ですか?

4

2 に答える 2

36

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

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

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

于 2010-04-12T18:43:32.897 に答える
26

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

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

于 2010-04-12T16:59:58.627 に答える