在.NET中利用委托实现窗体间通信
对于窗体间简单的通信,采用VB6.0的方法就能满足我们的要求,但在一些架构设计复杂的应用中,这种方法就显得有点捉襟见肘了,同时该方法还有一个缺点,就是它仅仅对通过.NET窗体向导添加进去的窗体起作用,而对于自定义的窗体类型我们是无法添加到Forms对象集合中的。而且也和其它诸如构造函数传参等方法一样,会在窗体间大量互相引用各自的成员,造成了彼此之间存在着很大的耦合性,非常不利于窗体模块间的独立,这不符合良好软件设计模式的思想。 如果我们想在一个窗体中访问另一个窗体中自定义的成员,必须把该成员的可见性设置为Public或者通过属性公开,通过属性公开的话还说得过去,但如果把可见性设置成Public的,这样做就无可避免的破坏了类型封装性的原则,而这一做法也是我们在.NET下开发相当乐意做的,特别是对于初次接触.NET的开发人员,实现访问另一类型中成员的话最先想到的就是把该成员的可见性设置为Public,当然这样做算不上是错误,但把这一做法作为自己的首要灵感,至少从面向对象的角度出发显然是不合适的。 在.NET下,还为我们提供了另外一种强大的机制来实现窗体通信,这就是委托。委托可理解为一种类型安全的函数指针,.NET下的事件的实现都是以委托做为基础的。关于委托在这篇文章中我就不详细介绍了,后边会有文章专门介绍这一概念。 在此我演示通过在一个窗体里向另外一个窗体里的ListBox控件添加Item项来说明这一方法。因此需要两个窗体,一个MainFrm窗体,一个ChildFrm窗体,另外还需要一个Middle类,作为MainFrm和ChildFrm之间通信的桥梁。我也将给出VB.NET和C#两种语言的代码,以便大家可以做一下比较。 首先是MainFrm窗体,在MainFrm窗体中,拖一个ListBox控件即可,MainFrm.vb的代码如下(为简单起见,在此省去自动生成的代码): Public Class Form3 再看ChildFrm窗体,在其中拖一个TextBox和一个Button控件,通过在TextBox中输入值后,按Button按钮向MainFrm窗体的ListBox控件中添加Item项。 Public Class Form2 最后看Middle类: Public Class Middle 为了更好的演示MainFrm和ChildFrm之间的独立性,修改一下Application.Designer.vb的代码: <Global.System.Diagnostics.DebuggerStepThroughAttribute()> 好了,代码完了,是不是很简单?通过上面的代码可以看出来,通过Middle类,MainFrm和ChildFrm都和Middle类通信,它们之间除了参数的耦合外,已不再引用彼此的内部成员,这样就显得更加独立了。 下面是对应的C#代码,MainFrm.cs: public partial class MainFrm: Form 同样我们修改一下Program.cs的代码: static class Program
(编辑:咸宁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Novus轻量级电动摩托车 它更像是艺术品
- “艺术”与“机械”的融合:家用电梯“隐形冠军”启动平台战
- iOS 10.3.2 Beta 4公测版怎么样 iOS 10.3.2 Beta 4公测版更
- 展望未来,合作共赢丨第三届中国全装修家居产业峰会圆满召开
- ios10.1可以越狱吗 ios10.1越狱方法教程一览
- 居然之家拟5.6亿收购天津保理|海鸥住工整装卫浴产业链又添一
- 本世纪以来最长的梅雨季 除湿机和干衣机卖疯了
- 夏图M&D:高了的脚与窄了的扶手丨中国智能家居市场2020年十
- 浅谈ASP中Web页面间的数据传递
- 学会区分Visual Studio 2005,Visual Studio 2005 Team Syst