方法 : プログラムによって ASP.NET ユーザー コントロールのインスタンスを作成する
更新 : 2007 年 11 月
ASP.NET Web ページでプログラムによってサーバー コントロールのインスタンスを作成できるように、ユーザー コントロールのインスタンスも作成できます。
ユーザー コントロールのインスタンスをプログラムによって作成するには
ユーザー コントロールで、@ Control ディレクティブにユーザー コントロールにクラスを割り当てる ClassName 属性を必ず含めます。
ClassName 属性を厳密に型指定されたユーザー コントロールに設定するコード例を次に示します。
<%@ Control className="MyUserControl" %>
ユーザー コントロールを使用するページで、@ Reference ディレクティブを使用してユーザー コントロールへの参照を作成します。
ユーザー コントロールをプログラムによって作成する場合、ASP.NET Web ページでそのコントロールの厳密型を利用できるのは、そのコントロールへの参照を作成した後だけです。たとえば、MyUserControl.ascx ファイル内で作成されたユーザー コントロールへの参照を作成するコードを次に示します。
<%@ Reference Control="MyUserControl.ascx" %>
メモ : プログラムによってコントロールを読み込む場合は、@ Reference を使用します。ユーザー コントロールを宣言によってページに追加する場合は、@ Register ディレクティブを使用します。詳細については、「方法 : ASP.NET Web ページにユーザー コントロールを含める」を参照してください。
ユーザー コントロールのクラス名を使用して、コントロールのインスタンス変数を作成します。このクラスは、ASP 名前空間に属します。
たとえば、Spinner クラスとして宣言するユーザー コントロールのインスタンスを作成する場合は、次のような構文を使用します。
Protected Spinner1 As ASP.Spinner
Protected ASP.Spinner Spinner1;
コードで LoadControl メソッドを呼び出してユーザー コントロールのインスタンスを作成します。
必要に応じてプロパティの値を割り当て、PlaceHolder などのコントロールをページのコンテナの ControlCollection コレクションに追加します。
メモ : Add メソッドを使用してコントロールを ControlCollection オブジェクトに追加する場合、それらのコントロールは処理された順序でコレクション内に配置されます。コレクション内の特定の位置にコントロールを追加する場合は、AddAt メソッドを使用し、コントロールの格納場所とするインデックスの位置を指定します。
使用例
ユーザー コントロールをプログラムによって読み込む ASP.NET Web ページの例を次に示します。このページには、コントロールのファイルを指定するために @ Reference ディレクティブが含まれます。LoadControl メソッドはファイルを読み込み、ページに追加できるコントロールとしてインスタンス化します。
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>
<script runat="server">
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
ASP.Spinner)
' Set MaxValue first.
Spinner1.MaxValue = 20
Spinner1.MinValue = 10
PlaceHolder1.Controls.Add(Spinner1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" runat="server">
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1" runat="server"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script runat="server">
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>
<html>
<head id="Head1" runat="server">
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1" runat="server"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>