2010-12-28 10 views
0

デザインビューでフォームを開くときに、フォームのコンストラクタが呼び出されないのですか?何故なの?どういうわけかそれを強制的に呼び出すことはできますか? コンストラクタにMessageBoxを表示してフォームの基本タイプ(別のフォーム)のコンストラクタからのMessageBoxのみを表示してテストしました...C#Windowsフォームデザインタイムフォームコンストラクタは呼び出されませんか?

+0

フォームのインスタンスを作成する場合は、フォームを呼び出す必要があります。デザインビューでフォームを開くとどういう意味ですか? – Pabuc

答えて

0

この動作は仕様です。 Visual Studioのフォームデザイナーは、のように設計されている代わりにインスタンス化することはできません。この動作を変更する方法はありません。設計時にいくつかのロジックを実行する必要がある場合は、そのロジックをカプセル化して継承する別個の祖先を作成する必要があります。

これは、デザイナを使用できるようにするために、抽象クラスまたは汎用クラスからフォームを継承できない理由です。

+0

[OK]を、多分あなたはこれで私を助けることができる:ベースフォームは、ユーザーが派生したフォームで設定できるようにするプロパティに応じてsmthを行います。しかし、ユーザーがデザイナーにプロパティを設定すると、そのコンストラクターから呼び出されるInitialComponents()メソッドに追加されます。したがって、基本フォームでは、プロパティの変更は(デザイン時には)表示されません。プロパティが(デザイン時に)変更された場合、基本フォームにどのように伝えることができますか? – nogola

+0

@nogolaできません。 *設計中の*型で宣言されたプロパティは、デザイナーが実際に使用するインスタンスには存在しません。 –

+0

しかし、デザイナーはどのようにしてフォームに追加したばかりのコントロールの位置を知っていますか?私が知る限り、この情報はInitialComponents()メソッドにあります。そしてそれは私の財産が変更される場所でもあります... – nogola

関連する問題