VB6与.NET中事件处理的差异

来源:岁月联盟 编辑:zhu 时间:2007-02-01
  .NET框架通过代表模型(delegate model)来处理事件。简而言之,你可以创建向记到事件源的事件模型。当事件发生时,事件源调用所有登记到它上的代表,这就使得我们可以使用几个VB6中没有的技巧。

为了演示这一点,让我们创建一个带有两个按钮控件的视窗(form),这两个按钮分别为:Button1和Button2。VB.NET自动为它们分别创建了两个事件代表,即Button1_Clicked and Button2_Clicked,代码如下所示。注意在申明的末尾使用到了一个关键字:Handles,它把代表登记到事件源上。

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVale As System.EventArgs) _
HandlesButton1.Click
MsgBox("Button1_Click")
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
ByVale As System.EventArgs) _
HandlesButton2.Click
MsgBox("Button2_Click")
End Sub
你可以通过对同一个事件源创建新的子程序来建立自己的代表。在申明的结尾,用关键字Handles把代表连接到你想处理的事件上,一个代表可以连接到多个事件上(用逗号格开),如下面的代码所示:

Private Sub Test(ByVal sender As System.Object, _
ByVale As System.EventArgs) _
HandlesButton1.Click, Button2.Click
MsgBox("Test")
End Sub
在这个例子中,每次点击Button1按钮,就会显示两个消息框,一个显示“Button1_Click”、另一个显示“Test”。当点击Button2,出现的两个消息框分别显示“Button2_Click”和“Test”。不过,这两个消息框出现的先后次序(即事件处理函数的调用次序)不定。

通过使用关键字Handles,你可以让单个子程序处理多个控件的事件,也可以让单个控件事件有多个子程序。