委托--用户控件到普通页面之间的传值

委托--用户控件到普通页面之间的传值

用户控件在程序中我们经常用到,但是用户控件到普通页面之间的传值,却很少用,在这里要使用委托去实现

所谓委托,通俗的说就是代替别人去做事情,下面举个例子就明白了!假如我要送个同事小王一箱水果,由于他家比较远,就让离他家比较近的小张帮我去送给他,那么小张就是我委托的人。下面结合上面的例子看看在程序中如何通过委托去处理一下事件

 

用户控件:

 

现在我在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中调用就可以了

 

上面讲的就是委托,可以好好想想其中的原理!

 

posted @ 2011-02-27 17:17  双魂人生  阅读(771)  评论(0编辑  收藏  举报