User Control之间的通讯有很多种方法。比较简单的是利用session,cookie,viewstate,url parameter,javascript,访问子控件的属性等。但这些方案不是很elegance,容易出错且修改不便。我们可以利用delegate和event来很好地解决这样的问题。
比如有一个aspx文件,包含了2个user control,分别是uc1和uc2。在uc1中的事件发生时需要传递对象到uc2。
在UC1(uc1的类)中我们需要新创建一个event。
public delegate void someHandler(object o);
public event someHandler whenClicked;
第一行我们定义了一个类似函数指针(c#没有指针,这么说帮助理解而已),且定义了它接受一个object参数。第二行定义了这个类有一个叫whenClicked事件。当然这个事件的指针就是someHandler啦。
在这个UC1中比如有一个btnClick事件来激发whenClicked事件:
protected void btnClick(Object sender, EventArgs e)
{
whenClicked(sourceObject);
}
现在我们设想一下用户在按下鼠标的时候,whenClicked事件被激活了。在aspx中我们要为uc1的whenClicked事件定义具体处理方法:
uc1.whenClicked += new UC1.someHandler(magicMethod);
protected void magicMethod(object o)
{
uc2.Data = o;
}
UC2只要增加一个属性就可以了:
public object Data
{
set { targetObject = value; }
}
这样就全部完成了。举一反三,从ascx到aspx也可以用这个方法来传递任何object。
使用event来处理用户控件之间的通讯
最新推荐文章于 2024-09-10 12:41:25 发布