Controllo composto e controllo utente

Nella tabella riportata di seguito viene fornito un riepilogo delle differenze tra controlli composti e controlli utente. Per ulteriori informazioni sulla modifica di un controllo utente, vedere Controlli utente dei Web Form.

Controllo composto Controllo utente
Supporto minimo per la modifica in fase di progettazione. Supporto completo per la modifica in fase di progettazione. La modifica di un controllo utente in una finestra di progettazione visiva o in una pagina ASP.NET (pagina Web Form) non presenta alcuna differenza.
Modificato a livello di codice in un linguaggio di programmazione orientato ad oggetti destinato a Common Language Runtime, quale C# o Visual Basic .NET. Modificato in modo dichiarativo mediante i blocchi di script (o pagine di codice sottostante) e la sintassi della pagina ASP.NET.
Nota   Per modificare i blocchi di script vengono utilizzati linguaggi orientati ad oggetti destinati a Common Language Runtime, quali C#, Visual Basic .NET e JScript .NET. Il framework di pagina ASP.NET nasconde tuttavia numerosi dettagli di programmazione allo sviluppatore.
Compilato e mantenuto come assembly (DLL). Salvato come file di testo con estensione ASCX (con un file opzionale di codice sottostante).
Ideale per la modifica di controlli generici ridistribuibili. Ottimizzato per funzionalità specifiche dell'applicazione.
Supporto completo in fase di progettazione se utilizzato su un host della fase di progettazione. È possibile aggiungere un controllo composto alla casella degli strumenti di una finestra di progettazione visiva e trascinarlo in una pagina. Supporto minimo per l'utilizzo in una finestra di progettazione.

Nota   Se si desidera estendere la funzionalità di un controllo singolo, ad esempio Label, non è necessario creare un controllo composto o un controllo utente. In tal caso, è opportuno derivare il controllo da Label per sfruttare i vantaggi offerti dall'eredità e dal polimorfismo e aggiungere o eseguire l'override dei membri. Se viene creato un controllo utente o un controllo composto che contiene un solo controllo, Label, il nuovo controllo non disporrà più del modello a oggetti di Label. È necessario creare un controllo utente o un controllo composto solo nel caso in cui si desideri combinare più controlli esistenti.

Nell'esempio riportato di seguito viene illustrato un controllo utente equivalente al controllo composto sviluppato nella sezione Esempio di controllo server composto. Il controllo utente genera un evento personalizzato denominato Check. Il delegato dell'evento CheckEventHandler e la classe dei dati evento CheckEventArgs, utilizzati dall'evento Check, sono definiti nella sezione Esempio di controllo server composto.

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

Utilizzo di un controllo utente in una pagina

Nella pagina di esempio illustrata di seguito viene utilizzato il controllo utente UserControl.ascx in una pagina ASP.NET. Per ulteriori informazioni, vedere Inserimento di un controllo utente in una pagina Web Form.

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

Vedere anche

Esempio di controllo server composto | Composizione e rendering