necessidades. Com isso muitas vezes precisamos implementar funcionalidades e que tambm na maioria das vezes necessitam ser reutilizadas. O funcionalidade de um UserControl, essa, criar controles personalizados que possam ser reutilizados. esse o objetivo desse artigo de hoje, criar um UserControl que possua funcionalidade que possam ser reutilizadas como se fosse um componente. Para dar inicio, abra o Visual Studio, crie um novo WebSite. No Meu caso estou usando o Visual Studio 2010, mais pode ser qualquer verso.
Como exemplo, vou criar um UserControl que tem como funcionalidade autenticar e receber o login e a senha do usurio. Nele incluirei 2 Labels, 2 TextBox, 1 LinkButton e 2 Button. E ficar da seguinte formar. 01 <asp:Panel ID="pnlLogin" runat="server" GroupingText="Login"> 02 <asp:Label ID="lblUsuario" runat="server" Text="Usuario" /><br /> 03 <asp:TextBox ID="txtUsuario" runat="server" /><br /> 04 <asp:Label ID="lblSenha" runat="server" Text="Senha" /><br /> 05 <asp:TextBox ID="txtSenha" runat="server" TextMode="Password" /><br /> 06 <br /> 07 <asp:LinkButton ID="lnkEsqueceuSenha" runat="server" Text="Esqueceu a senha?" /> 08 <br /> 09 <br /> 10 <asp:Button ID="btnAutenticar" Text="Autenticar" runat="server" /> 11 <asp:Button ID="btnCadastrar" Text="Cadastrar" runat="server" /> 12 </asp:Panel> Com esse cdigo j temos a tela de login, porem no o mais importante que so os eventos. Para que ele seja funcional, iremos atribuir eventos aos Botes e possibilitar que um WebForm recupere a ao do usurio por meio do evento acionado. Para iniciar criamos o evento Click dos botes e do LinkButon. 01 <asp:Panel ID="pnlLogin" runat="server" GroupingText="Login"> 02 <asp:Label ID="lblUsuario" runat="server" Text="Usuario" /><br /> 03 <asp:TextBox ID="txtUsuario" runat="server" /><br /> 04 <asp:Label ID="lblSenha" runat="server" Text="Senha" /><br /> 05 <asp:TextBox ID="txtSenha" runat="server" TextMode="Password" /><br /> 06 <br /> 07 <asp:LinkButton ID="lnkEsqueceuSenha" runat="server" Text="Lembrar senha"OnClick="lnkLembrarSenha_Click" /> 08 <br /> 0 9 <br /> 1 0 <asp:Button ID="btnAutenticar" Text="Autenticar" runat="server" OnClick="btnAutent icar_Click" /> 1 1 <asp:Button ID="btnCadastrar" Text="Cadastrar" runat="server" OnClick="btnCadastra r_Click" /> 12 </asp:Panel> 01 protected void btnAutenticar_Click(object sender, EventArgs e) 02 { 03
11 protected void btnCadastrar_Click(object sender, EventArgs e) 12 { 13 14 } Se voc tentar recuperar o evento do boto Autenticar por exemplo vai ver que no ser possvel, para isso vamos criar agora os eventos necessrios. 1 // Delegate 2 public delegate void AutenticarEventHandler(object sender, System.EventArgs e); 3 public delegate void LembrarSenhaEventHandler(object sender, System.EventArgs e); 4 public delegate void CadastrarEventHandler(object sender, System.EventArgs e); 5
6 // Event 7 public event AutenticarEventHandler Autenticar; 8 public event LembrarSenhaEventHandler LembrarSenha; 9 public event CadastrarEventHandler Cadastrar; Criamos um Event e um Delegate para cada Button e LinkButton e por meio do evento Click deles que faremos a chamada desses Eventos personalizados. 01 protected void btnAutenticar_Click(object sender, EventArgs e) 02 { 03 if (Autenticar != null) Autenticar(sender, e); 04 } 05 06 protected void lnkLembrarSenha_Click(object sender, EventArgs e) 07 { 08 if (LembrarSenha != null) LembrarSenha(sender, e); 09 } 10
11 protected void btnCadastrar_Click(object sender, EventArgs e) 12 { 13 if (Cadastrar != null) Cadastrar(sender, e); 14 } Agora que temos nosso UserControl, abra o Default.aspx em modo designer e arraste o UserControl para ele e adicione um Label. 01 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 02 03 <%@ Register src="LoginControl.ascx" tagname="LoginControl" tagprefix="uc1" %> 04
05 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 06
07 <html xmlns="http://www.w3.org/1999/xhtml"> 08 <head runat="server"> 09 <title></title> 10 </head> 11 <body> 12 <form id="form1" runat="server"> 13 <div> 14 <uc1:LoginControl ID="LoginControl1" runat="server" /> 15 <br /> 1 <asp:Label ID="lblResultado" runat="server" ForeColor="Red"></ 6 asp:Label> 17 </div> 18 </form> 19 </body> 20 </html> Para finalizar, vamos criar os eventos necessarios no CodeBehind do Default.aspx para que nosso exemplo funcione. 01 protected void Page_Load(object sender, EventArgs e) 02 { 03 LoginControl1.Autenticar += new LoginControl.AutenticarEventHandler(LoginControl1_Autenticar) ; 0 4 LoginControl1.LembrarSenha += new LoginControl.LembrarSenhaEventHandler(LoginControl1_LembrarSe nha); 05 LoginControl1.Cadastrar += new LoginControl.CadastrarEventHandler(LoginControl1_Cadastrar); 06 } 07