Webユーザーコントロール(以下、ユーザーコントロール)を他のユーザーコントロールやWebフォームに追加するには
- 追加される側をデザイン状態(ソースはNG)で開いておいてから、ソリューションエクスプローラから追加するユーザーコントロール(***.ascx)を追加したい場所にドラッグ&ドロップします。
たった1ステップ行うだけです。
続いて、動的にコントロールを追加するには
※ マイクロソフトのKB(Knowledge Base)の方が確実なので、以下のリンクをご覧ください。
[HOWTO] Visual C# .NET を使用して ASP.NET で動的にコントロールを作成する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;317794
重要なのは、オーバーライドしたOnInitに(あるいは以下の例のようにPage_Initを追加した中に)コンストラクトしたコントロールをControlsプロパティにAddすることです。
protected void Page_Init(object sender, EventArgs e)
{
Button button = new Button();
button.ID = "Button1";
button.Text = "Button1";
this.Controls.Add(button);
}
最後に本題の、動的にユーザーコントロールを追加するには
先程のやり方を真似てユーザーコントロールの型をnewしてAddしてもうまくいきません。
追加するユーザーコントロールで動的にコントロールを追加していた場合は、そのことが反映されています。
UserControlHoge ucHoge = new UserControlHoge();
this.Controls.Add(ucHoge);
では、動的に追加されるユーザコントロールは.ascxファイルを既定のまま何も加えず、全てのコントロールを初期化時に追加しなければならないのでしょうか。
これではVisualな開発(デザイン画面での開発)ができません。
ご安心ください。方法は用意されています。
コンストラクタの部分を以下のように書き換えるだけです。
UserControlHoge ucHoge = (UserControlHoge)LoadControl("~/UserControlHoge.ascx");
this.Controls.Add(ucHoge);
LoadControlメソッドはPageクラスとUserControlクラスの基底クラスであるSystem.Web.UI.TemplateControlクラスのメソッドです。
TemplateControl.LoadControl メソッド (MSDNライブラリ)
http://msdn2.microsoft.com/ja-jp/library/system.web.ui.templatecontrol.loadcontrol.aspx
以上で終わります。
(Posted Date) 20:20 LoadControlメソッドについて補足
(Posted Date) 20:30 タイトルを修正