使用event来处理用户控件之间的通讯

在Linux下使用wxWidgets进行跨平台GUI开发(三):高级控件与事件处理实践 本文深入探讨了:高级控件的实战应用事件处理的双重机制复杂布局的实现技巧完整项目示例开发下一篇预告:跨平台开发专题Windows/macOS适配技巧多分辨率适配方案国际化与本地化实现打包发布全平台应用掌握这些高级技术后,你已具备开发专业级跨平台应用的能力。任何问题欢迎在评论区留言讨论! 阅读详情


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#WinForm用户控件间相互传值 本小程序主要展示WinForm用户控件使用及相互之间的通信,这里主要是通过事件进行实现的,第一个用户控件:(UCForm1.cs)主要包含一个文本框,第二个用户控件:(UCForm2.cs)包含了一个DataGridView和一个文本框,第三个用户控件:(UCFormMain.cs)包含了前面两个用户控件,程序启动窗体上用到第三个用户控件,程序功能是:当在第一个用户控件文本框里输入信息后会及时的把信息显示到第二个用户控件的DataGridView数据显示控件指定的列上,在第二个用户控件上的文本框中输入信息也及时显示到本用户控件的DataGridView指定的列上 立即下载

相关推荐

c# – 在WPF窗口和用户控件之间共享数据的最佳方法是什么?

WPF有时会令人愤怒. 我有一个相当简单的应用程序,它包含一个主窗口,其中包含一个选项卡控件和几个选项卡.我不喜欢在同一个文件中使用所有选项卡的代码的想法,所以我使用this question的答案将每个选项卡分成单独的用户控件. 在我的主窗口中,我有一个包含应用程序设置的对象实例,以及一些其他应用程序范围的数据.我的一些标签需要访问此数据以进行数据绑定.我无法找到实现这一目标的好方法....

君子居易 2697

JS实时通信消息

SignalR是通讯框架,前台Web页面与后台服务实现数据的交互。ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程。实时Web功能使服务端代码推送内容到链接可客服端并立即应用成为可能,而不需要服务端等待客户端去请求数据 jquery.signalR-1.2.2.min.js 下载地址:http://www.bootcdn

代码改变生活 3347

进程与系统服务之间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

genius52的专栏 2148

VC++下用MSComm控件实现串口通讯

首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。   打开所需串口后,需要考虑串口

秋月语荷花 1827

在VS2010中如何添加MSCOMM控件,实现串口通讯

https://www.cnblogs.com/zhuxuekui/p/3550939.html 参考文章:http://wenku.baidu.com/link?url=MLGQojaxyHnEgngEAXG8oPnISuM9SVaDzNTvg0oTSrrJkMXIR_6MR3cO_Vnh-grkUekLw2CSnQlE2ni5P-CzCCyI36fnNFFl_BkbEbMomP_&nbsp;&...

爱她就要努力 1522

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)...

qq_34694118的博客 1812

在基于单文档(SDI)程序中应用MSCOMM串口通讯控件

MSCOMM串口通讯控件在基于对话框的程序中很好使用,但有时我们需要在基于文档的程序中使用,本文就如何在基于单文档的程序中使用控件进行了详细说明。1.利用MFC向导建立基于单文档应用程序SDIComm,所有步骤缺省,在项目中插入MSCOMM控件(Project->Add to Project->Components and Control...->Registered Active Contro

yaqifly的专栏 626

在基于单文档(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处

VC++/MFC的专栏 2821

Event-Model-View-Controller 架构

Event-Model-View-Controller 架构 如何在系统运行过程中动态调整全局字号或者控件尺寸 在Android中引入Greenbot的EventBus,在Flex里面引入CommandDispatcher, 将原来依赖Runtime的Event机制包含进来,脱离对于语言平台的依赖。

IT匠 871
上一篇: 克隆出来的Debian/Ubuntu在新的主机环境中上网问题解决
下一篇: 新版本集中发布
空空法师
博客等级 码龄21年 18粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值