定义一个用户控件,让其自身触发的事件能够触发主页面的事件。
首先,定义一个用户控件:
命名为WUC02.ascx,在其中放置一个TextBox,把AutoPostBack设置为True.
为其添加一个TextChange事件,页面主要代码如下(代码有省略):
public abstract class WUC02 : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.TextBox txt1;
public delegate void myDelegate(object sender,myEventArgs e); //定义代理
public event myDelegate myEvent; //定义事件
private void txt1_TextChanged(object sender, System.EventArgs e)
{
if(txt1.Text == "yangxi")
{
myEventArgs eveArgs = new myEventArgs();
eveArgs.Value = "/"" + txt1.Text + "/" is pass by the Event Args";
if(myEvent != null)
{
myEvent(txt1,eveArgs); //触发事件
}
}
else
{
txt1.Text = "";
}
}
}
//自定义事件的参数
public class myEventArgs:System.EventArgs
{
private string _value;
public string Value
{
get{ return _value; }
set{ _value = value;}
}
}
主页面,如下图:
后台主要代码如下(代码有省略):
public class WebForm10 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.PlaceHolder PH1;
protected System.Web.UI.WebControls.Label lbl1;
protected WUC02 myUC2;
private void Page_Load(object sender, System.EventArgs e)
{
myUC2 = (WUC02)LoadControl("./WUC02.ascx");//添加用户控件
myUC2.myEvent += new WUC02.myDelegate(this.OnMyEvent); //注册事件
PH1.Controls.Add(myUC2);
}
//事件触发的方法
private void OnMyEvent(object sender,myEventArgs e)
{
lbl1.Text = e.Value;
}
运行如下: