C# Sample Code Using Delegates in ASP.NET
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Header : System.Web.UI.UserControl
{
public event ColorChangedEventHandler ColorChanged;
public event LinkClickEventHandler Clicked;
string _texts;
string _text;
public void Page_Init(object sender, EventArgs e)
{
//Wire-up the EventHandler
this.colorList.SelectedIndexChanged += new System.EventHandler(Index_Changed);
if (_texts.IndexOf('$') > 0)
{
string[] Texts = _texts.Split('$');
LinkButton lnk;
Label lbl;
for(int cnt = 0; cnt < Texts.Length; cnt++)
{
lnk = new LinkButton();
lnk.Text = Texts[cnt];
lnk.Click += new EventHandler(lnk_Click);
plc.Controls.Add(lnk);
lbl = new Label();
lbl.Text = "";
plc.Controls.Add(lbl);
}
}
}
public string Text
{
set
{
_text = value;
}
get
{
return _text;
}
}
void lnk_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
_text = lb.Text;
if (Clicked != null)
{
//Call the Delegate and pass the ColorEventArgs
Clicked(this, e);
}
}
//Method called when the DropDownList value changes
public void Index_Changed(object sender, EventArgs e)
{
//Create a new Arguments Object
ColorEventArgs myArgs = new ColorEventArgs();
//Get the color selected
myArgs.Color =colorList.SelectedItem.Text;
colorList.BackColor = System.Drawing.Color.Blue;
//Check if any method has subscribed for notification
//If you don't do this then an exception gets thrown
//When there are no methods subscribing to the Event
if(ColorChanged!=null)
{
//Call the Delegate and pass the ColorEventArgs
ColorChanged(this, myArgs);
}
}
public string Texts
{
get
{
return _texts;
}
set
{
_texts = value;
}
}
}
public delegate void AddClickEventHandler(object sender,EventArgs e);
//Define a Delegate
public delegate void LinkClickEventHandler(object sender,EventArgs e);
//Define a Delegate
public delegate void ColorChangedEventHandler(object sender, ColorEventArgs e);
//Define a Class that Extends the EventArgs
public class ColorEventArgs : System.EventArgs
{
private string color;
//Color Property
public string Color
{
get
{
return this.color;
}
set
{
this.color = value;
}
}
}
———————————————————————————————————————————————————
Using this in another page. Include the header.ascx file
protected void Page_Load(object sender, EventArgs e)
{
//attach functionality to the events in the header
Header1.ColorChanged += new ColorChangedEventHandler(Header1_ColorChanged);
Header1.Clicked += new LinkClickEventHandler(Header1_Clicked);
Database db = DatabaseFactory.CreateDatabase();
DataSet ds = db.ExecuteDataSet(CommandType.StoredProcedure, "usp_Employees");
}
void Header1_Clicked(object sender, EventArgs e)
{
Response.Write(Header1.Text);
}
void Header1_ColorChanged(object sender, ColorEventArgs e)
{
Response.Write("header color changed" + e.Color);
//throw new Exception("The method or operation is not implemented.");
}