委托--用户控件到普通页面之间的传值
委托--用户控件到普通页面之间的传值
用户控件在程序中我们经常用到,但是用户控件到普通页面之间的传值,却很少用,在这里要使用委托去实现
所谓委托,通俗的说就是代替别人去做事情,下面举个例子就明白了!假如我要送个同事小王一箱水果,由于他家比较远,就让离他家比较近的小张帮我去送给他,那么小张就是我委托的人。下面结合上面的例子看看在程序中如何通过委托去处理一下事件
用户控件:
现在我在Default.aspx中使用了用户控件,而且我想在点击Button的时候把文本框中的值传到Default.aspx的某一个Lable中,那么这个时候就可以使用委托了,怎么实现呢?
在这里我们可以理解把用户控件看成是我,页面Default.aspx看成是小王,那么就少个小张了,小张是谁呢,不错,就是我们要定义使用的委托。
下面我们来描述一下小张,也就是定义一个委托:
public delegate void Onclick(object sender,SendMessage e);
也就说小张必须要有这个能力,上面就是定义他的这个能力的,任何人让他做这样的事情,都能够完成。所以object sender就是代表传递的介质,也就是手,SendMessage e就是箱子。
为了能让这个箱子在他们之间传递,在这里我们要定义一个箱子,也就是一个类,然后在类里定义一些变量,代表可以放到箱子里的东西!具体的东西要看委托人想放上面东西在里面了!
public class SendMessage:EventArgs
{
private string message;
public string Message
{
get { return message; }
set { message = value; }
}
public SendMessage(string message)
{
this.Message = message;
}
}
其次来看看我,首先我要把小张找过来,也就是在用户控件中声明一下
public event Onclick OnClick;
然后当我用手把篮子交给他,也就是要触发按钮事件
protected void Button2_Click(object sender, EventArgs e)
{
if(OnClick!=null)
{
OnClick(this,new SendMessage(this.TextBox2.Text));
}
}
小张到了小王家之后,要把东西交给他,也就是在Default.aspx中
protected void Page_Load(object sender, EventArgs e)
{
UserControl1.OnClick += new Onclick(UserControl1_OnClick);
// UserControl1.OnClick += tab双击
}
void UserControl1_OnClick(object sender, SendMessage e)
{
Response.Write("<script>alert('从用户控件传过来的值是:"+e.Message+"')</script>");
}
如果直接传递用户控件中的值,按钮在Default.aspx这边的话,就没那么麻烦了,直接在用户控件中定义一个属性,即要传递的值的属性,然后再Default.aspx中调用就可以了
上面讲的就是委托,可以好好想想其中的原理!