次の方法で共有


複合コントロールとユーザー コントロール

複合コントロールとユーザー コントロールの相違点をまとめた表を次に示します。ユーザー コントロールの作成については、「Web フォーム ユーザー コントロール」を参照してください。

複合コントロール ユーザー コントロール
作成に関して、最小限のデザイン時サポートが提供されます。 作成に関して、完全なデザイン時サポートが提供されます。ASP.NET ページ (Web フォーム ページ) を作成するときと同じ方法で、ユーザー コントロールをビジュアル デザイナで作成できます。
C# や Visual Basic .NET など、共通言語ランタイムを対象としたオブジェクト指向プログラミング言語を使用してプログラムにより作成されます。 ASP.NET ページ構文とスクリプト ブロック (または分離コード ページ) を使用して、宣言により作成されます。
メモ   スクリプト ブロックを作成するために使用する言語は、C# や Visual Basic .NET、JScript .NET など、共通言語ランタイムを対象にしたオブジェクト指向言語ですが、ASP.NET ページ フレームワークでは、開発者は多くのプログラミング要素の詳細を考慮する必要がありません。
コンパイルされ、アセンブリ (.dll) として永続化されます。 .ascx 拡張子が付いたテキスト ファイルとして保存されます。一緒に分離コード ファイルを保存することもできます。
再配布可能な汎用コントロールの作成に適しています。 アプリケーション固有の機能の作成に適しています。
デザイン時ホストで使用する場合は、完全なデザイン時サポートが提供されます。複合コントロールはビジュアル デザイナのツールボックスに追加し、ページにドラッグ アンド ドロップできます。 デザイナで使用する場合は、最小限のデザイン時サポートが提供されます。

メモ   Label コントロールなどの 1 つのコントロールの機能を拡張する場合は、複合コントロールまたはユーザー コントロールは作成しないでください。この場合は、Label から派生して継承とポリモーフィズムによるメリットを利用し、メンバを追加またはオーバーライドします。Label コントロールだけが含まれているユーザー コントロールまたは複合コントロールを作成しても、そのコントロールには Label のオブジェクト モデルは含まれません。ユーザー コントロールまたは複合コントロールを作成するのは、複数の既存コントロールを組み合わせる場合だけにしてください。

複合サーバー コントロールのサンプル」で作成した複合コントロールと同等のユーザー コントロールのサンプルを次に示します。このユーザー コントロールは、Check というカスタム イベントを発生させます。Check クラスで使用される CheckEventHandler イベント デリゲートと CheckEventArgs イベント データ クラスは「複合サーバー コントロールのサンプル」で定義されています。

<%-- UserControl.ascx. --%>
<%-- The namespace CustomControls has to be imported because it contains
 CheckEventArgs and CheckEventHandler.  --%>
<%@Import Namespace = "CustomControls" %> 
<script language="VB" runat=server>
   Private ReadOnly Property Sum() As Integer
      Get
         EnsureChildControls()
         Return Int32.Parse(box1.Text) + Int32.Parse(box2.Text)
      End Get
   End Property

   Public Number As Integer = 100

   Public Property Text() As String
      Get
         EnsureChildControls()
         Return label.Text
      End Get
      Set
         EnsureChildControls()
         label.Text = value
      End Set
   End Property

   Public Event Check As CheckEventHandler

   Protected Overridable Sub OnCheck(e As CheckEventArgs)
      RaiseEvent Check(Me, e)
   End Sub

   Private Sub Button_Clicked(sender As Object, e As EventArgs)
      OnCheck(New CheckEventArgs(Sum - Number))
   End Sub 
</script>
<h3>Enter a number :

<asp:TextBox id = box1 text = "0" runat = server />
</h3> <br>
<h3>Enter another number :
<asp:TextBox id = box2 text = "0" runat = server />
</h3> <br>       
<asp:Button id = button text = "Submit" OnClick = "Button_Clicked" runat = server />
<br> <br>
<asp:Label id = label text = "Click sumbit to  see if you won." 
height = 100 width = 400 runat = server />                     

ページでのユーザー コントロールの使用

ASP.NET ページで UserControl.ascx ユーザー コントロールを使用する例を次に示します。詳細については、「Web フォーム ページへのユーザー コントロールの取り込み」を参照してください。

<%@Import Namespace = "CustomControls" %>
<%@ Register TagPrefix="MyUserControl"  TagName = "MyControl" Src = "UserControl.ascx" %>
<script language="VB" runat=server>
   Private Sub Sum_Checked(sender As Object, e As CheckEventArgs)
      If e.Match = True Then
         control.Text = "<h2> You won a million dollars!!!! </h2>"
      Else
         control.Text = "Sorry, try again. The numbers you entered don't add up to" & _
               " the hidden number."
      End If
   End Sub 
</script>

<html>            
<body>
<h1> The mystery sum game </h1><br>             
<form runat=server>                        
<MyUserControl:MyControl id = "control" OnCheck = "Sum_Checked" Number = "10" runat = server/>                                                   
</form>                                               
</body>                                         
</html>

参照

複合サーバー コントロールのサンプル | コンポジションとレンダリング