通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>VB编程>>正文 新版上线![旧版]
注:打开慢时请稍等

探索VB系列中的事件处理的奥秘

http://www.iyit.net  日期:2006-10-12 17:20:12  来源:  点击:
参加讨论】 Visual Basic中的自定义事件

  还记得在一个事件有多个侦听器时发生的问题,还有一个事件侦听器抛出一个异常吗?这个问题有一个相当简单的解决方案,用多路广播委托实例的回调列表关联到这个事件。然而,在Visual Basic .NET 2002 和2003,这里有一些其他的事件挑战:(如果)没有复杂或低效率的代码,简单(的方法)将无法体现。Visual Basic 2005以前,事件委托类型的实例总是由Visual Basic编译器为你创建,并且编译器无法提供给你修改这个委托实例的行为。

  Visual Basic 2005为事件声明添加了新的Custom关键字。这个关键字允许你为事件的AddHandler, RemoveHandler和RaiseEvent行为提供代码。 这取决于你创建适当的委托类型及创建拥有关于事件侦听器信息的类型的实例。然而,除此之外,你有对你如何处理事件有着完全地控制。

  为了在Visual Studio 2005中创建一个自定义事件,在一个类里面放入你的游标,并为你的事件录入一个声明,如下:

Public Custom Event <YourEventName> As <EventDelegateType>

  当你完成这行代码时,编辑器将插入关联的AddHandler, RemoveHandler和RaiseEvent部分。比如,设想一下,你希望通过创建一个自定义事件处理程序来解决异常问题。示例项目的Visual Basic 2005版的FileSearch6类包含像这样做的一个自定义FileFound事件。代码包括适当的事件委托的一个声明,如下所示:

Public Delegate Sub FileFoundEventHandler( _
ByVal sender As Object, ByVal e As FileFoundEventArgs)

  键入事件声明添加一个空的自定义事件,如图 10 所示的。

Public Custom Event FileFound As FileFoundEventHandler
AddHandler(ByVal value As FileFoundEventHandler)

End AddHandler

RemoveHandler(ByVal value As FileFoundEventHandler)

End RemoveHandler

RaiseEvent(ByVal sender As Object, ByVal e As FileFoundEventArgs)

End RaiseEvent
End Event

  这要由你提供事件委托实例的存储(storage),并提供储存,移出并回调事件侦听器的代码。对于本例,因为代码需要能单独回调每个侦听器并捕捉及处理任何异常,FileSearch6类包括了一个储存了FileFoundEventHandler实例的泛型列表集合(generic List collection)。每次任何类为这个事件调用AddHandler,或用一个Handles子句捕捉这个事件,Visual Basic运行时引擎调用FileFound 自定义事件的AddHandler部分。代码必须添加FileFoundEventHandler以传递到泛型列表。RemoveHandler部分从内部集合里移去指定的委托实例。RaiseEvent部分调用每个委托实例的Invoke方法,捕捉和处理发生的异常。完全的自定义事件看起来如图 11 所示的代码。

Private listeners As New List(Of FileFoundEventHandler)
Public Custom Event FileFound As FileFoundEventHandler
AddHandler(ByVal value As FileFoundEventHandler)
listeners.Add(value)
End AddHandler

RemoveHandler(ByVal value As FileFoundEventHandler)
If listeners.Contains(value) Then
listeners.Remove(value)
End If
End RemoveHandler

RaiseEvent(ByVal sender As Object, ByVal e As FileFoundEventArgs)
For Each listener As FileFoundEventHandler In listeners
Try
listener.Invoke(sender, e)
Catch ex As Exception
’ Something goes wrong? Just move on to the next handler.
End Try
Next
End RaiseEvent
End Event


  通过推进代码到事件声明本身,引发事件的代码不再需要担心处理异常的问题了。这就是说,与使用你前面看到的代码来引发事件不同,代码假定在Visual Basic 2005中的FileSearch6类可以简单地调用OnFileFound方法(它来引发事件)或直接调用RaiseEvent。担心异常的责任现在适得其所:它就在事件代码本身之中。这项技术直到Visual Basic 2005才可以使用。注意Visual Studio 2005现仍在beta版(测试中)。正因为如此,到最终版本发布前其细节会有变化。

  还有其它可以用到自定义事件吗?Rocky Lhotka,一个Visual Basic MVP,在他的blog上包括另一个详细的例子( .NET 2.0 solution to serialization of objects that raise events )。他论述了 你可能会用到这个技术来解决涉及引发事件类序列化而侦听器没有序列化的问题。(令人惊讶的是,这经常发生,因为窗体没有序列化,但是常常用户创建事件的侦听器是序列化的。)Paul Vick,作为Microsoft的Visual Basic开发团队的成员之一,他的blog上包括一个例子显示你如何可以使用一个 自定义事件来减少暴露给大量事件而只有很少的事件可能会用到的类的系统开销。对于窗体来说就是这个情况,例如—窗体类暴露于大量事件,但是大多数时间里,你只会处理它们中一或两个。没有某些技巧,编译器将为每个事件引发一个委托实例,尽管你不会使用它们。请看Paul的blog在 Custom events。

本新闻共5页,当前在第5页  1  2  3  4  5  


编辑: [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:[JAVA]十四种Java开发工具点评
下一篇:用Visual Basic制作安装程序
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
用Visual Basic制作安装程序 VB.NET注册表编程 在VB中使用注册表
用VB函数轻松访问系统注册表 在VB中调用API操作注册表 VB4.0对注册表操作的命令
asp.net中的vb7中如何调用dll中的函数 asp.net中的vb7中如何使用socket作一个 在ASP.NET中处理 datetime 的一些通用函
在ASP.NET中操作文件的例子(VB) 在ASP.NET中处理datetime的一些通用函数 VB.NET多线程开发实例
多线程填写treeview控件(vb.net) vb.net的windows窗体实现dos命令  一个用Wsh来控制SqlServer的Dcom的VBs
和我一起入门Direct3D的VB.net编程 VB.NET如何在没有.NET框架的机器上运行 LCS问题算法之VB.net版
VB.net 调用带参数存储过程 vb.net 中实现画图 在VB.Net中创建使用控件数组
VB6 中 善用 ByRef 提升速度 VB6 中使用错误处理对于速度的影响 EJB系列教程之一(JBuilder4+IAS41+Vbj4
最新更新 热点排行 推荐新闻
用Visual Basic制作安装程序
探索VB系列中的事件处理的奥秘
[JAVA]十四种Java开发工具点评
初学java常用开发工具介绍
Java编程中更新XML文档的常用方法
我的QQ被盗走的原因分析
WebQQ好玩不?大鸟带你一起体验
奇奇怪怪的QQ密技十五招
QQ被盗到出售过程详解
微软WinXP SP3再次跳票 推至08年发布
Google苹果合作浏览器 防恶意网站
微软操作系统实现开源?
网管应当如何管理Windows操作系统?
让Windows XP系统锁定期间拒绝关机
WindowsVista中文版11月30日正式发布
用Visual Basic制作安装程序
探索VB系列中的事件处理的奥秘
合并VCD片断、快速删除文件夹--DOS命令
DOS教程 DOS命令基础应用
低格、分区、高格的应对--DOS命令应用
破解QQ密码如此简单 
一劳永逸--批处理命令(一)
QQ2006 Beta3隆重发布 实用功能一一奉
美国微软总部相中重庆15岁网络奇才(图
QQ号码激活的常见问题及案例分析 
SQL Server安装文件挂起错误解决办法
三分钟让你的系统变处女:Acronis Tru
直接编辑VB中网格控制项的两种方法
我的QQ被盗走的原因分析
WebQQ好玩不?大鸟带你一起体验
奇奇怪怪的QQ密技十五招
QQ被盗到出售过程详解
Google苹果合作浏览器 防恶意网站
网管应当如何管理Windows操作系统?
让Windows XP系统锁定期间拒绝关机
WindowsVista中文版11月30日正式发布
Google优化网站管理员指导方针
Hilltop算法- 探索Google排名新算法

设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息