私はユーザーがフォームにドロップできる.NETコントロールを持っています。コントロールがいつ初期化されたのか分かりますか?
Visual Studioはホスティングフォームのコンストラクタから呼び出されInitializeComponent
を作成します。
public EditItemForm()
{
InitializeComponent();
}
この自動生成方法は、自動生成されたファイルには、デザイナーのserializiblityルールに基づいて、私のコントロールを初期化します。例えば:
private void InitializeComponent()
{
...
this.lvResults = new Contoso.Controls.VirtualGrobber();
...
//
// lvResults
//
this.lvResults.BorderStyle = System.Windows.Forms.BorderStyle.None;
...
//FrobGrobberForm
...
this.Controls.Add(this.lvResults);
...
}
どのようにすべてのデザイナーのシリアル化が行われたときに、私は、誰かのフォームの上に座ってコントロールが、知っている、と私は「準備完了」ですができますか?
は、それがストリームからロードされた後に制御を初期化:Delphiで
、自動制御でシリアル化メカニズムは、各コントロールの
Loaded
メソッドを呼び出します。procedure Loaded; override;
説明
VCLストリーミングシステムコール コントロールがフォーム内の他の のオブジェクトに依存するすべての初期化を完了できるように、コントロールのフォームがメモリにロードされた後、自動的に をロードしました。あなたは
Control.OnControlCreated
メソッドをオーバーライドすることができます:あなたはWinFormsのControl
クラスについて尋ねると仮定すると、
これを行う方法はいくつかあります。どちらが慣用的であるか適切であるかは、実際にあなたが初期化しようとしているものによって決まります。もちろん、デザイナーは何も魔法を使わないで、あなたのコントロールのプロパティを設定するだけです。また、カスタムコントロールを設計する標準的なルールは、ユーザーまたはデザイナーのいずれの順序でもプロパティを設定できる必要があることです。 –
ISupportInitializeインターフェイスを実装します。 –
@ HansPassant
私はISupportInitializeを実装し、EndInit()にコードを入れましたが、決して呼び出されません。 ISupportInitializeを実装する必要がありますか?私はそれを取り戻す。 * 2回*をビルドすると、デザイナーは 'InitializeComponent'中に' EndInit() 'を呼び出します。本当に答えの形でそれを語るべきです。 –