您的位置:学习中国 推荐教程 VB编程 正文
原作者:kuku 添加时间:2007-06-02 原文发表:2007-06-02 人气:112 来源:互联网

本文章共6190字,分4页,当前第3页,快速翻页:
 
-----------------------------------------------------------------------------------------------------------------------------------------------

本文提示:《解析Visual Basic.NET事件编程(3)》是本站编辑们为广大网友精选的实用文章,本文阐述了关于文章的相关理论,相对来说专业性强,但是本文只是针对于某个问题提出的见解与论述,未必能辐射到相关问题的方方面面,所以本文处理问题的方法仅仅为您提供一些参考。更多问题请查阅学习中国网其他栏目哦.

-----------------------------------------------------------------------------------------------------------------------------------------------



  假设BankAccount对象有三个已经注册的事件处理程序用于接收LargeWithdraw事件的通知。如果你使用RaiseEvent关键字触发事件并且调用列表中的第二个事件处理程序出现了错误会发生什么事情呢?包含RaiseEvent语句的代码行将收到一个运行时错误,但是你没有办法调试是哪一个事件处理程序产生的。另外,第二个事件处理方法产生的异常没有办法处理并按希望继续运行第三个事件处理程序。

Sub Withdraw(ByVal Amount As Decimal)
 '如果需要的话就发送通知
 If (Amount > 5000) AndAslo (Not LargeWithdrawEvent Is Nothing) Then
  Dim handler As LargeWithdrawHandler
  For Each handler In LargeWithdrawEvent.GetInvocationList()
   Try
    handler.Invoke(Amount)
   Catch ex As Exception
    '处理异常
   End Try
  Next
 End If
 '执行撤消
End Sub

图3.使用私有委托字段

  但是如果编程访问私有的LargeWithdrawEvent字段,你就可以使用更好的方式处理一个事件处理方法产生的异常。查看图3中的代码,你会发现,处理较低层次并且对私有委托字段编程提供了额外的控制能力。你可以轻易地处理异常并继续执行列表后面地事件处理程序。这种技术比RaiseEvent语法明显的好处,RaiseEvent语法中事件处理方法产生的异常阻止了列表后面的其它事件处理程序的执行。


  建立和注册事件处理程序

  现在你已经知道怎样定义和引发事件了,下面讲解怎样建立事件处理程序并使用给定的源对它进行注册。在Visual Basic .NET中有两种途径可以达到这个目标。第一种技术是我们知道的动态事件绑定并且包含AddHandler关键字的使用。第二种技术是静态事件绑定并且包含与Visual Basic相似的WithEvents关键字。本文中我将使用动态事件绑定,下面将讲解动态事件绑定是怎样工作的。

  要记住事件处理程序是委托对象。因此你通过作为事件基础的委托类型实例化委托对象来建立事件处理程序。当你建立委托对象时,你必须把它绑定到作为事件处理程序服务的目标处理方法。

  一旦建立了事件处理程序,你就必须通过调用事件源上特定的注册方法用特定的事件注册它。回想一下,LargeWithdraw事件的注册方法叫做add_LargeWithdraw。当你调用add_LargeWithdraw方法并传递一个委托对象作为参数时,事件源把委托对象添加到接收事件通知的事件处理程序列表中。

  事件注册容易弄混的是你永远不能直接的调用类似add_LargeWithdraw的注册方法。事实上,如果你试图用名字访问事件注册方法,Visual Basic .NET编译器将产生一个实时编译错误。作为代替,你能使用包含在AddHandler语句中的代替语法。当你使用AddHandler语句时,Visual Basic .NET编译器为你产生调用事件注册方法的代码。

  让我们看一个使用动态事件注册的例子。假定你在AccountHandlers类中写了下面一组共享方法:

Class AccountHandlers

 Shared Sub LogWithdraw(ByVal Amount As Decimal)
  '把撤消信息写入日志文件
 End Sub

 Shared Sub GetApproval(ByVal Amount As Decimal)
  '阻塞直到管理者批准
 End Sub
End Class

  如果你想把这些方法作为BankAccount类中的LargeWithdraw事件的事件处理程序应该怎么做呢?我们从建立一个绑定到LargeWithdraw的事件处理程序开始。首先你必须建立作为事件处理程序服务的委托对象:

Dim handler1 As LargeWithdrawHandler
handler1 = AddressOf AccountHandlers.LogWithdraw

  下一步,你必须使用AddHandler语句与事件源一起注册该委托对象。当你使用AddHandler语句注册事件处理程序时,必须传递两个参数:

AddHandler <event>, <delegate object>

  AddHandler所需要的第一个参数是计算类或对象的事件的表达式,第二个参数是一个联系事件处理程序的委托对象的引用。下面是使用AddHandler语句与BankAccount对象的LargeWithdraw事件一起注册事件处理程序的例子:
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 下一页>>
本页地址
收藏到:[收藏夹] [百度搜藏] [新浪ViVi] [POCO网摘] [ 和讯网摘] [好哦网摘] [Google书签]
               
[搜狐网摘] [365Key网摘] [天极网摘] [我摘] [博采网摘] [igooi网摘]
相关文章

VB.NET中对象的克隆
VB.Net编程入门之Hello World 入门篇
VB 神童教程第二章第九节——综合示例三
VB 神童教程第二章第八节——组合框控件
VB 神童教程第二章第七节——列表框控件
VB 神童教程第二章第六节——综合示例二
VB 神童教程第二章第五节——单选与复选控件
VB 神童教程第二章第四节-CommandButton控件
VB 神童教程第二章第三节——综合示例一
VB 神童教程第二章第三节——综合示例一
在VB.NET中获得功能加强的分类和查询数组
vb.net例程集锦
向SQL Server数据库添加图片和文字
多个窗体之间如何互相调用
如何拖动没有边框的窗体?
怎么让窗体透明后,控件不透明?
Video/ Audio压缩数据流播放技术
VB程序中处理随机事件
VB编程的必备技巧
VB6制作Win98风格的工具栏

相关评论


本文章所属分类:首页 推荐教程 VB编程   VB编程