TOC

This article has been localized into Spanish by the community.

UserControls:

Eventos en UserControls

En el capítulo anterior, vimos como definir las propiedades de nuestro UserControl, ¡pero también podemos declarar y usar eventos! Esto nos permite encapsular aún más funcionalidades dentrp de tus controles, y así permitir a tu página responder ante ciertos eventos disparados por el control, de ser necesario.

En este capítulo, crearemos un UserControl nuevo y sencillo, ilustraremos como se crean eventos. Aunque no tendrá aplicación en el mundo real, nos servirá para mostrar como usar eventos en un UserControl. Si no sabes como crear y utilizar un UserControl, por favor revisa los capítulos anteriores. Este solo se enfocará en eventos.

Primero, creamos EventUserControl, con este código en él

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="EventUserControl.ascx.cs" Inherits="EventUserControl" %>
Page title: 
<asp:TextBox runat="server" ID="txtPageTitle" />
<asp:Button runat="server" ID="btnUpdatePageTitle" OnClick="btnUpdatePageTitle_Click" Text="Update" />

Con el texto y controles de servidor que conocemos. En el CodeBehind, se ve algo como esto:

public partial class EventUserControl : System.Web.UI.UserControl
{
    private string pageTitle;
    public event EventHandler PageTitleUpdated;

    protected void btnUpdatePageTitle_Click(object sender, EventArgs e)
    {
        this.pageTitle = txtPageTitle.Text;
        if(PageTitleUpdated != null)
            PageTitleUpdated(this, EventArgs.Empty);
    }

    public string PageTitle
    {
        get { return pageTitle; }
    }
}

Hemos definido una variable contenedor pageTitle y una propiedad para ella. Después tenemos algo nuevo, un evento. Como puedes ver, está definido de manera parecida a cualquier otro tipo de campo, pero es un poco distinto. La teoría detrás de esto se explica en el tutorial de C#, por lo que no se explicará aquí.

En el evento Click de nuestro botón hemos asignado el campo pageTitle. Después revisamos si PageTitleUpdated, nuestro evento, es nulo. Si no es así, significa que hemos asignado este evento en alguna parte, y en este caso, enviamos una notificación llamando a PageTitleUpdated como un método. Como parámetros, enviamos this (una referencia de UserControl a si mismo) como remitente y un parámetro EventArgs vacío. Esto asegurará que los controles asignados a este evento sean notificados que pageTitle ha sido actualizado. Ahora, en nuestra página, he declarado nuestro UserControl de la siguiente manera:

<%@ Register TagPrefix="My" TagName="EventUserControl" Src="~/EventUserControl.ascx" %>

Y lo inserté así:

<My:EventUserControl runat="server" ID="MyEventUserControl" OnPageTitleUpdated="MyEventUserControl_PageTitleUpdated" />

Como puedes notar, hemos definido un gestor de eventos para el evento PageTitleUpdated como si fuera otro control de servidor. En el CodeBehind de nuestra página, definimos el gestor de eventos para nuestro evento UserControl de la siguiente manera:

protected void MyEventUserControl_PageTitleUpdated(object sender, EventArgs e)
{
    this.Title = MyEventUserControl.PageTitle;
}

¡Es así de simple! Obviamente, podríamos haber actualizado el título de la página directamente desde nuestro UserControl, esto fue simplemente para dar un ejemplo sobre como usar eventos, pero como probablemente aprenderás más adelante, esta técnica nos será de ayuda en muchas situaciones.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!