VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB6与.NET中事件处理的差异
发表评论(0)作者:BUILDER.COM, 平台:VB6.0+Win98, 阅读:9457, 日期:2003-08-29
    .NET中的事件模型和Visual Basic 6有所不同。在使用.NET时,你无须深入理解这些差异,不过,这样做可以帮助你理解使用的模型。


.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,你可以让单个子程序处理多个控件的事件,也可以让单个控件事件有多个子程序。