Events in .NET

An event is a message sent by an object to signal the occurrence of an action. This action can be caused by user interaction such as button click, mouse click, etc. The Object that sent the event is called the event sender. The object that receives the event and responds according to that is called the event receiver.
 
Actually, in communication between the sender and the receiver, the sender does not know which method or object will receive the event it raises.
 
The mediator between these two is called a "Delegate".
 
A delegate is a class that can hold a reference to a method. The Delegate class has a signature and it can hold the reference only to the methods that match to its signature.
 
Normally I found the requirement to save the main page data in the user control button click which led me to write this article.
 
Here I have taken a user control which contains a text box and button. The following the design code given below
 
Code design
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="TestControl.ascx.cs" Inherits="UserControls_TestControl" %>  
  2. <asp:TextBox ID="txtbx" runat="server"></asp:TextBox>  
  3. <asp:Button ID="btn" runat="server" Text="Click Me" OnClick="btn_Click" /> 
Code Behind:
 
On WebUserControl.ascx.cs I have written simple delegate and event handler as shown below,
  1.  using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7.   
  8. public partial class UserControls_TestControl : System.Web.UI.UserControl  
  9. {  
  10.     public String Value { getset; }  
  11.     public delegate void OnButtonClick(string value, int count);  
  12.     public event OnButtonClick btnHandler;  
  13.   
  14.     protected void Page_Load(object sender, EventArgs e)  
  15.     {  
  16.   
  17.     }  
  18.     protected void btn_Click(object sender, EventArgs e)  
  19.     {  
  20.         if (btnHandler != null)  
  21.         {  
  22.             btnHandler(string.Empty, 0);  
  23.             // Write some text to output  
  24.             Response.Write("User Controls Button Click <BR/>");  
  25.             txtbx.Text = this.Value;  
  26.         }  
  27.     }  
Here in the above code it first checks the btnHandleris null or not and raising the event by passing arguments. You can pass as many arguments as you want. But you need to change the public delegate void OnButtonClick(string value, int count) and btnHandler(string.Empty,0) lines for changing the number of arguments.
 
Here I have taken the main page which comprises of textbox.I have used this user control on the main page.When the click this button of the user control I need to set the Text box value to the same as the text box on the main page.
 
TestPage.aspx
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test Page.aspx.cs" Inherits="Test_Page" %>  
  2.    
  3. <%@ Register Src="~/UserControls/TestControl.ascx" TagName="UControl" TagPrefix="UC" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head runat="server">  
  7.     <title></title>  
  8. </head>  
  9. <body>  
  10.     <form id="form1" runat="server">  
  11.     <div>  
  12.         <asp:TextBox runat="server" ID="txtbx" /><br />  
  13.         <br />  
  14.         <UC:UControl ID="ucTest" runat="server" />  
  15.     </div>  
  16.     </form>  
  17. </body>  
  18. </html> 
The Code behind this TestPage.aspx.cs is given below:
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7.   
  8. public partial class Test_Page : System.Web.UI.Page  
  9. {  
  10.   
  11.     protected void Page_Load(object sender, EventArgs e)  
  12.     {  
  13.         ucTest.btnHandler += new UserControls_TestControl.OnButtonClick(ucTest_btnHandler);  
  14.     }  
  15.   
  16.     void ucTest_btnHandler(string value, int count)  
  17.     {  
  18.         value = txtbx.Text;  
  19.         ucTest.Value = value;  
  20.         Response.Write("Main Page Event<BR/>Selected Value: " + value + "<br/>");  
  21.     }  
  22.   
  23.     protected void btn_Click(object sender, EventArgs e)  
  24.     {  
  25.     }  
The user control contains one button. When the user clicks on this button I will call a method on the main page using a delegate.
 
The screenshot is given below to show the passing the Main Page Text box value to the User
 
Control
 
EveNET1.gif
 
The Final Output Screen Shot is given below
 
EveNET2.gif
 
Now when you run the application and clicks on the button you can see that when the user clicks on the button the user control raise the click event and calls the ucTest.btnHandler(string Value,int count) method on main page.
 
Happy Coding:-)