5

InitializeComponentフォームにコンポーネントを設定します。ただし、作成したUsercontrolの場合、デフォルトのコンストラクターを呼び出しますが、usercontrolで(パラメーターを使用して)独自のコンストラクターを呼び出します。ボイラープレートコードは内容を編集しないと言っているので、これを行うための最良の方法は何ですか?

4

1 に答える 1

5

TypeConverterクラスを作成し、UserControlをで装飾する必要がありますTypeConverterAttribute(typeof(MyTypeConverter))。タイプコンバーターは、Visual Studioにタイプの作成方法を指示します。これにより、InitializeComponentに配置される内容を制御できます。本当に深く掘り下げて、実際にカスタムCodeDomSerializerを記述して、必要なC#コードを書き出すことができます。この手法を使用して、InitializeComponentメソッドにCastleWindsorのすべてのFormsコントロールを強制的に解決させました。それは本当にうまくいきます...

ともかく...

MSは、次のようなタイプですでにこの手法を使用していることに気付くでしょう。

this.treeView1 = new System.Windows.Forms.TreeView();
this.treeView1.Location = new System.Drawing.Point(72, 104);
this.treeView1.Name = "treeView1";
this.treeView1.Nodes.AddRange(
new System.Windows.Forms.TreeNode[] {
  new System.Windows.Forms.TreeNode("Node0"),
  new System.Windows.Forms.TreeNode("Node1")});

基本的に-TypeConverterで、'ConverterTo'メソッドをオーバーライドし、新しいInstanceDescriptorを返します。これは、WinFormsデザイナーに、型をインスタンス化する方法(使用するコンストラクター、および渡す引数)を説明します。

ヒープの詳細については、ここ(基本的な実装を含む)を参照してください:http: //msdn.microsoft.com/en-us/library/ms973818.aspx

InitializeComponentは、すべての拡張ポイントに頭を悩ませれば、非常に強力です。ハッピーコーディング!

于 2012-09-23T22:19:08.797 に答える