Partager via


Contrôle composite et contrôle utilisateur

Le tableau suivant résume les différences entre les contrôles composites et les contrôles utilisateur. Pour plus d'informations sur la création d'un contrôle utilisateur, consultez Contrôles utilisateur Web Forms.

Contrôle composite Contrôle utilisateur
Prise en charge minimale au moment du design pour la création. Prise en charge complète au moment du design pour la création. La création d'un contrôle utilisateur dans un concepteur visuel est identique à la création d'une page ASP.NET (page Web Forms).
Créé par programme dans un langage de programmation orienté objet ciblant le Common Language Runtime, notamment C# ou Visual Basic .NET. Créé par déclaration à l'aide de la syntaxe de page ASP.NET et de blocs de script (ou de pages code-behind).
Remarque   Les langages utilisés pour la création des blocs de script sont des langages orientés objet ciblant le Common Language Runtime, tels que C#, Visual Basic .NET et JScript .NET. Toutefois, l'infrastructure de page ASP.NET empêche le développeur de voir de nombreux détails de programmation.
Compilé et persistant sous la forme d'un assembly (.dll). Enregistré sous la forme d'un fichier texte avec une extension .ascx (avec un fichier code-behind facultatif).
Bien adapté à la création de contrôles génériques redistribuables. Axé sur des fonctionnalités propres à une application.
Prise en charge complète au moment du design lorsqu'il est utilisé dans un hôte de design. Un contrôle composite peut être ajouté à la boîte à outils d'un concepteur visuel et faire l'objet d'un glisser-déplacer jusqu'à une page. Prise en charge minimale pour une utilisation dans un concepteur.

Remarque   Si vous souhaitez étendre les fonctionnalités d'un contrôle, par exemple, Label, ne créez pas de contrôle composite ou de contrôle utilisateur. Vous devez plutôt dériver de Label (pour bénéficier des avantages offerts par l'héritage et le polymorphisme), puis ajouter ou substituer des membres. Si vous créez un contrôle utilisateur (ou un contrôle composite) qui ne contient qu'un seul contrôle, Label, votre nouveau contrôle n'a plus le modèle objet de Label. Vous ne devez créer un contrôle utilisateur (ou un contrôle composite) que lorsque vous souhaitez combiner plusieurs contrôles existants.

L'exemple suivant montre un contrôle utilisateur qui équivaut au contrôle composite développé dans l'exemple de contrôle serveur composite. Le contrôle utilisateur déclenche un événement personnalisé nommé Check. Le délégué d'événement CheckEventHandler et la classe de données d'événement CheckEventArgs, qui sont utilisés par l'événement Check, sont définis dans l'exemple de contrôle serveur composite.

<%-- 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 />                     

Utilisation d'un contrôle utilisateur sur une page

La page suivante utilise le contrôle utilisateur UserControl.ascx sur une page ASP.NET. Pour plus d'informations, consultez Insertion d'un contrôle utilisateur dans une page Web Forms.

<%@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>

Voir aussi

Exemple de contrôle serveur composite | Composition et rendu