利用事件委托来实现UserControls之间的交互
在from1.aspx页上加入2个用户控件,名为test1.ascx和test2.ascx。
在test1.ascx中加入一个文本框TextBox1,在test2.ascx中加入一个按钮btnOK。
在test2.asc.cs中加入下面的代码:
private void btnOK_Click(object sender, System.EventArgs e)
{
OnCancel(new EventArgs());
}
public static event CancelEventHandler Cancel; //注意:声明事件要是静态的。
protected virtual void OnCancel(EventArgs e)
{
if(Cancel!=null)
{
Cancel(this,e);
}
}
public delegate void CancelEventHandler(object sender,EventArgs e); 在test1.ascx.cs中加入下面的代码:
这样,当单击test2上的btnOK时,就会执行OnCancel调用Cantel事件并执行test1中的test1_Message方法。这只是一个简单的例子,但这种应用很广泛,你可以用在自定义组件的交互,可以调用方法执行更复杂的逻辑。
在test1.ascx中加入一个文本框TextBox1,在test2.ascx中加入一个按钮btnOK。
在test2.asc.cs中加入下面的代码:
![](/Images/OutliningIndicators/None.gif)
{
OnCancel(new EventArgs());
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
{
if(Cancel!=null)
{
Cancel(this,e);
}
}
![](/Images/OutliningIndicators/None.gif)
//要调用执行的方法
private void test1_Message(object sender,EventArgs e)
{
this.TextBox1.Text="测试";
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
//将test_Message加入Cancel事件
test2.Cancel+=new CancelEventHandler(test1_Message);
}
#endregion
private void test1_Message(object sender,EventArgs e)
{
this.TextBox1.Text="测试";
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
//将test_Message加入Cancel事件
test2.Cancel+=new CancelEventHandler(test1_Message);
}
#endregion
这样,当单击test2上的btnOK时,就会执行OnCancel调用Cantel事件并执行test1中的test1_Message方法。这只是一个简单的例子,但这种应用很广泛,你可以用在自定义组件的交互,可以调用方法执行更复杂的逻辑。