Compartir a través de


Control compuesto frente a control de usuario

En la siguiente tabla se resumen las diferencias entre los controles compuestos y los controles de usuario. Para obtener más información acerca de los controladores de usuario, vea Controles de usuario de formularios Web Forms.

Control compuesto Control de usuario
Compatibilidad en tiempo de diseño mínima para crear. Compatibilidad en tiempo de diseño completa para crear. La creación de un control de usuario en un diseñador visual no difiere de la creación de una página ASP.NET (página de formularios Web Forms).
Creado mediante programación en un lenguaje de programación orientado a objetos que trabaje con Common Language Runtime, como C# o Visual Basic.NET. Creado de manera declarativa utilizando sintaxis de páginas ASP.NET y bloques de secuencias de comandos (o páginas de código subyacente).
Nota   Los lenguajes utilizados para crear los bloques de secuencias de comandos son lenguajes orientados a objetos que trabajan con Common Language Runtime, como C#, Visual Basic.NET, y JScript.NET; en cambio, el marco de trabajo de páginas ASP.NET oculta muchos datos de programación al programador.
Compilado y almacenado como un ensamblado (.dll). Guardado como archivo de texto con extensión .ascx (con un archivo de código subyacente opcional).
Muy apropiado para crear controles genéricos redistribuibles. Dirigido hacia una funcionalidad específica de la aplicación.
Compatibilidad en tiempo de diseño completa cuando se utiliza en un host de tiempo de diseño. Un control compuesto se puede agregar al cuadro de herramientas de un diseñador visual y arrastrar y soltar en una página. Compatibilidad mínima para su utilización en un diseñador.

Nota   Si desea ampliar la funcionalidad de un solo control, por ejemplo Label, no cree un control compuesto ni un control de usuario. En tal caso, derive de Label (para aprovechar las ventajas de la herencia y el polimorfismo) y agregue o reemplace miembros. Si crea un control de usuario (o un control compuesto) que contiene un control solamente, Label, el control nuevo dejará de tener el modelo de objeto de Label. Cree un control de usuario (o un control compuesto) sólo cuando vaya a combinar varios controles existentes.

En el siguiente ejemplo se muestra un control de usuario equivalente al control compuesto creado en Ejemplo de control de servidor compuesto. El control de usuario genera un evento personalizado denominado Check. El delegado de evento CheckEventHandler y la clase de datos de evento CheckEventArgs, que utiliza el evento Check, se definen en Ejemplo de control de servidor compuesto.

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

Utilizar un control de usuario en una página

La siguiente página utiliza el control de usuario UserControl.ascx en una página ASP.NET. Para obtener más información, vea Incluir un control de usuario en una página de formularios 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>

Vea también

Ejemplo de control de servidor compuesto | Composición frente a procesamiento