委托,从字面理解来说,就是我在玩电脑的时候,我喝咖啡了,就会喊飞飞,给我拿咖啡。 但实际上,我不会说这么长,因为我不知道咖啡放在哪,所以我只用一喊飞飞,那么她自己就会拿咖啡来了。
我们拿个UserControl 和 Page 来做个例子。
UC的代码
Code
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 UCTEST : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
public event DoUserEvenHanlder OnUserEventHanlder;
{
if (OnUserEventHanlder != null)
{
OnUserEventHanlder(str);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DoUserEvent("User click button 1");
}
protected void Button2_Click(object sender, EventArgs e)
{
DoUserEvent("User click button 2");
}
}
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 UCTEST : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public delegate void DoUserEvenHanlder(string str);
public event DoUserEvenHanlder OnUserEventHanlder;
protected void DoUserEvent(string str)
{
if (OnUserEventHanlder != null)
{
OnUserEventHanlder(str);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
DoUserEvent("User click button 1");
}
protected void Button2_Click(object sender, EventArgs e)
{
DoUserEvent("User click button 2");
}
}
Page 的代码
Code
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 TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//this.WebUserControl1.OnUserEventHanlder += new WebUserControl.DoUserEvenHanlder(WebUserControl1_OnUserEventHanlder);
this.UCTEST1.OnUserEventHanlder += new UCTEST.DoUserEvenHanlder(WebUserControl1_OnUserEventHanlder);
}
{
InsertB(str);
}
{
//do insert B method;
Label1.Text = str;
Response.Write("1: Insert A in UC <br/><br/>" + str);
}
}
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 TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//this.WebUserControl1.OnUserEventHanlder += new WebUserControl.DoUserEvenHanlder(WebUserControl1_OnUserEventHanlder);
this.UCTEST1.OnUserEventHanlder += new UCTEST.DoUserEvenHanlder(WebUserControl1_OnUserEventHanlder);
}
void WebUserControl1_OnUserEventHanlder(string str)
{
InsertB(str);
}
private void InsertB(string str)
{
//do insert B method;
Label1.Text = str;
Response.Write("1: Insert A in UC <br/><br/>" + str);
}
}
接下来再 show 一下vb.net 的 ,其实思路都一样 只是有些写法不同
UC的
Code
Public Partial Class WebUserControl1
Inherits System.Web.UI.UserControl
RaiseEvent OnUserEventHanlder(str)
End Sub
DoUserEvent("User click button 1")
End Sub
DoUserEvent("User click button 2")
End Sub
End Class
Public Partial Class WebUserControl1
Inherits System.Web.UI.UserControl
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Public Event OnUserEventHanlder As DoUserEvenHanlder
Public Delegate Sub DoUserEvenHanlder(ByVal str As String)
Protected Sub DoUserEvent(ByVal str As String)
RaiseEvent OnUserEventHanlder(str)
End Sub
Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
DoUserEvent("User click button 1")
End Sub
Protected Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
DoUserEvent("User click button 2")
End Sub
End Class
Page 的
Code
Public Partial Class WebForm1
Inherits System.Web.UI.Page
AddHandler WebUserControlx.OnUserEventHanlder, AddressOf UC_OnUserEventHanlder
End Sub
InsertB(str)
End Sub
Me.Label1.Text = str
End Sub
End Class
Public Partial Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler WebUserControlx.OnUserEventHanlder, AddressOf UC_OnUserEventHanlder
End Sub
InsertB(str)
End Sub
Sub InsertB(ByVal str As String)
Me.Label1.Text = str
End Sub
End Class
可以试下