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。
相关推荐
c# – 在WPF窗口和用户控件之间共享数据的最佳方法是什么?
WPF有时会令人愤怒. 我有一个相当简单的应用程序,它包含一个主窗口,其中包含一个选项卡控件和几个选项卡.我不喜欢在同一个文件中使用所有选项卡的代码的想法,所以我使用this question的答案将每个选项卡分成单独的用户控件. 在我的主窗口中,我有一个包含应用程序设置的对象实例,以及一些其他应用程序范围的数据.我的一些标签需要访问此数据以进行数据绑定.我无法找到实现这一目标的好方法....
JS实时通信消息
SignalR是通讯框架,前台Web页面与后台服务实现数据的交互。ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程。实时Web功能使服务端代码推送内容到链接可客服端并立即应用成为可能,而不需要服务端等待客户端去请求数据 jquery.signalR-1.2.2.min.js 下载地址:http://www.bootcdn
进程与系统服务之间用event通讯
<br />一般来说,进程与进程间通讯的通会采用以下代码<br />进程A<br />HANDLE hevent;<br />hevent=CreateEvent(NULL, TRUE, FALSE, "myevent");<br /> DWORD dwRtn = WaitForSingleObject(g_hEvent, 60*1000); //等1分钟<br /> if (dwRtn == WAIT_OBJECT_0) <br />{<br /> DePrintf("get even
VC++下用MSComm控件实现串口通讯
首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。 打开所需串口后,需要考虑串口
在VS2010中如何添加MSCOMM控件,实现串口通讯
https://www.cnblogs.com/zhuxuekui/p/3550939.html 参考文章:http://wenku.baidu.com/link?url=MLGQojaxyHnEgngEAXG8oPnISuM9SVaDzNTvg0oTSrrJkMXIR_6MR3cO_Vnh-grkUekLw2CSnQlE2ni5P-CzCCyI36fnNFFl_BkbEbMomP_ &...
VS2010中如何添加MSCOMM控件,实现串口通讯
文章来源:zhuxuekui3 的博客园 来不及授权了,我要速度记录。 1、VS2010没有自带MSCOMM控件,首先在该页面下载MSCOMM控件包:http://download.csdn.net/detail/rabbit200808/3236756 2、下载完毕后,把包里的所有文件拷贝到系统目录c:\windows\syswow64下(win 7系统);c:\windows\systom32(XP系统)。 (注:本人的系统为win7但目录却为:e:\windows\systom32)...
在基于单文档(SDI)程序中应用MSCOMM串口通讯控件
MSCOMM串口通讯控件在基于对话框的程序中很好使用,但有时我们需要在基于文档的程序中使用,本文就如何在基于单文档的程序中使用该控件进行了详细说明。1.利用MFC向导建立基于单文档应用程序SDIComm,所有步骤缺省,在项目中插入MSCOMM控件(Project->Add to Project->Components and Control...->Registered Active Contro
在基于单文档(SDI)程序中应用MSCOMM串口通讯控件(转载)
1、利用MFC向导建立基于单文档应用程序SDIComm,所有步骤缺省,在项目中插入MSCOMM控件(Project->Add to Project->Components and Control...->Registered Active Controls->Mcriosoft Commmunications Control,V6.0,单击INSERT,OK; 2、SDICommView.h处
Event-Model-View-Controller 架构
Event-Model-View-Controller 架构 如何在系统运行过程中动态调整全局字号或者控件尺寸 在Android中引入Greenbot的EventBus,在Flex里面引入CommandDispatcher, 将原来依赖Runtime的Event机制包含进来,脱离对于语言平台的依赖。
2697




被折叠的 条评论
为什么被折叠?



