This article is currently in the process of being translated into Portuguese (~99% done).
Events in UserControls
No capítulo anterior nós vimos como definir propriedades para o nosso UserControl, mas eventos podem ser declarados e usados também! Isso ajuda encapsular ainda mais funcionalidades dentro do seu controle e então permite que sua página responda a certos eventos disparados pelo controle se necessário.
Nesse capítulo, criaremos um novo e bem simples UserControl para ilustrar como criar eventos. Ele não terá utilidade no mundo real, mas apenas para mostrar a você como usar eventos em um UserControl. Se você não sabe como criar um UserControl, volte alguns capítulos. Este focará apenas na parte de eventos.
Primeiro, criamos um novo EventUserControl simples com esse código:
<%@ 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" />
Apenas texto e controles de servidor que já conhecemos. No CodeBehind ficará parecido com isso:
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; }
}
}
Nós definimos a variável pageTitle e uma propriedade para ela. Agora temos essa nova coisa: o evento. Como você pode ver, ele é definido muito parecido com qualquer tipo de campa, mas ele é diferente. A teoria sobre isso é explicada no tutoria de C#, logo não abordaremos isso aqui.
No evento Click do nosso botão, nós atribuímos o campo pageTitle. Então avaliamos se PageTitleUpdated, nosso evento, é nulo. Se ele não for, isso significa que nos registramos nesse evento em algum lugar e, nesse caso, enviamos uma notificação chamando PageTitleUpdated como método. Como parâmetros, nós enviamos this (a referência do próprio UserControl) como o remetente e um parâmetro EventArgs vazio. Isso fará com que todos os registrados serem notificados que pageTitle acabou de ser atualizado. Agora, na nossa página, nós declaramos nosso UserControl assim:
<%@ Register TagPrefix="My" TagName="EventUserControl" Src="~/EventUserControl.ascx" %>
E inserimos ele assim:
<My:EventUserControl runat="server" ID="MyEventUserControl" OnPageTitleUpdated="MyEventUserControl_PageTitleUpdated" />
Como você pode ver, nós definimos um handler de evento para o evento PageTitleUpdated como se ele fosse qualquer outro controle do servidor. No CodeBehind da nossa página, nós definimos o simples handler de enventos para o evento do UserControl assim:
protected void MyEventUserControl_PageTitleUpdated(object sender, EventArgs e)
{
this.Title = MyEventUserControl.PageTitle;
}
É simples! Agora obviamente, o título da página pode ser atualizado diretamente pelo nosso UserControl. Isso apenas dá um exemplo de como usar eventos. Como você provavelmente aprenderá mais tarde, essa técnica será muito útil em várias situações.