次の方法で共有


方法 : プログラムによって ASP.NET ユーザー コントロールのインスタンスを作成する

更新 : 2007 年 11 月

ASP.NET Web ページでプログラムによってサーバー コントロールのインスタンスを作成できるように、ユーザー コントロールのインスタンスも作成できます。

ユーザー コントロールのインスタンスをプログラムによって作成するには

  1. ユーザー コントロールで、@ Control ディレクティブにユーザー コントロールにクラスを割り当てる ClassName 属性を必ず含めます。

    ClassName 属性を厳密に型指定されたユーザー コントロールに設定するコード例を次に示します。

    <%@ Control className="MyUserControl" %>
    
  2. ユーザー コントロールを使用するページで、@ Reference ディレクティブを使用してユーザー コントロールへの参照を作成します。

    ユーザー コントロールをプログラムによって作成する場合、ASP.NET Web ページでそのコントロールの厳密型を利用できるのは、そのコントロールへの参照を作成した後だけです。たとえば、MyUserControl.ascx ファイル内で作成されたユーザー コントロールへの参照を作成するコードを次に示します。

    <%@ Reference Control="MyUserControl.ascx" %>
    
    c0az2h86.alert_note(ja-jp,VS.90).gifメモ :

    プログラムによってコントロールを読み込む場合は、@ Reference を使用します。ユーザー コントロールを宣言によってページに追加する場合は、@ Register ディレクティブを使用します。詳細については、「方法 : ASP.NET Web ページにユーザー コントロールを含める」を参照してください。

  3. ユーザー コントロールのクラス名を使用して、コントロールのインスタンス変数を作成します。このクラスは、ASP 名前空間に属します。

    たとえば、Spinner クラスとして宣言するユーザー コントロールのインスタンスを作成する場合は、次のような構文を使用します。

    Protected Spinner1 As ASP.Spinner
    
    Protected ASP.Spinner Spinner1;
    
  4. コードで LoadControl メソッドを呼び出してユーザー コントロールのインスタンスを作成します。

  5. 必要に応じてプロパティの値を割り当て、PlaceHolder などのコントロールをページのコンテナの ControlCollection コレクションに追加します。

    c0az2h86.alert_note(ja-jp,VS.90).gifメモ :

    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>

参照

概念

ASP.NET ユーザー コントロールの概要