複合コントロールとユーザー コントロールの相違点をまとめた表を次に示します。ユーザー コントロールの作成については、「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>