An event is a message sent by an object to
signal the occurrence of an action. This action can be caused by the 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:
<%@
Control Language="C#"
AutoEventWireup="true"
CodeFile="TestControl.ascx.cs"
Inherits="UserControls_TestControl"
%>
<asp:TextBox
ID="txtbx"
runat="server"></asp:TextBox>
<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,
using
System;
using
System.Collections.Generic;
using
System.Linq;
using System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
public
partial class
UserControls_TestControl : System.Web.UI.UserControl
{
public String
Value { get; set;
}
public delegate
void OnButtonClick(string
value, int count);
public event
OnButtonClick btnHandler;
protected void Page_Load(object
sender, EventArgs e)
{
}
protected void
btn_Click(object sender,
EventArgs e)
{
if (btnHandler !=
null)
{
btnHandler(string.Empty, 0);
// Write some text to output
Response.Write("User Controls
Button Click <BR/>");
txtbx.Text = this.Value;
}
}
}
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 number of arguments.
Here I have taken a main page which comprises of textbox .I have used this user
control in the main page .When the click this button of the user control I need
to set the Text box value to the same of the text box in the main page.
TestPage.aspx:
<%@
Page Language="C#"
AutoEventWireup="true"
CodeFile="Test
Page.aspx.cs" Inherits="Test_Page"
%>
<%@ Register
Src="~/UserControls/TestControl.ascx"
TagName="UControl"
TagPrefix="UC" %>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head
runat="server">
<title></title>
</head>
<body>
<form
id="form1"
runat="server">
<div>
<asp:TextBox
runat="server"
ID="txtbx"
/><br
/>
<br
/>
<UC:UControl
ID="ucTest"
runat="server"
/>
</div>
</form>
</body>
</html>
The Code behind of this TestPage.aspx.cs is given below:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
public
partial class
Test_Page : System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
ucTest.btnHandler += new
UserControls_TestControl.OnButtonClick(ucTest_btnHandler);
}
void ucTest_btnHandler(string value,
int count)
{
value = txtbx.Text;
ucTest.Value = value;
Response.Write("Main Page Event<BR/>Selected
Value: " + value + "<br/>");
}
protected void btn_Click(object
sender, EventArgs e)
{
}
}
The user control contains one button. When user clicks on this button I will call
a method on main page using delegate.
The screen shot are given below to show the passing the Main Page Text box value
to the User
Control
The Final Output Screen Shot is given below
Now when you run the application and clicks on button you can see that when user
click on button the user control raise the click event and calls the
ucTest.btnHandler(string Value,int count) method on main page.
Happy Coding:-)