vb和vb.net事件机制
2013-06-25 12:35
288 查看
学习java事件前,回顾了下vb6和vb.net的事件机制,总结在这里,供对比用。
事件是面对对象中对象间通信的方法。事件发生者(又叫事件源)发生一个事件时,通过发送一条消息,给事件接受者(事件处理者),事件接受者可以做出响应的处理。比如在某登录界面中,单击一个按钮,系统会验证用户的用户名和密码是否正确。用户单击按钮后,按钮(事件源)发出了单击事件,产生了自己被单击的消息给窗体,窗体(事件接受者)在自身代码窗口中进行响应的处理。
我们分别看下在vb和vb.net中是怎么实现事件机制的。
在vb6中,使用Event关键字定义事件,raiseEvent发出事件消息,在接受者的类中使用WithEvent表明自己是某个类的事件的接受者,我们看这样两段代码:
首先建立一个窗体,是一个登录窗体,输入用户名和密码后,点击登陆按钮可以登陆,代码(vb6)如下,使用了WithEvent来接收验证类(verifyClass)的消息:
在vb.net中事件的实现机制同vb基本相同,并且有了优化,通过Handles关键字,使事件实现的机制更灵活,handles可以使多个事件到同一个事件处理程序:
也可以通过AddHandler动态的绑定事件处理程序,即可以根据当时的条件选择将要绑定的事件处理程序,看下面这个例子。
首先定义一个person类,有走路这个事件,在走路方法中触发走路事件
接下来新建一个窗体类,窗体上有一个文本框和一个按钮,代码如下
这就是vb和vb.net的事件处理机制,等学了java事件机制后将进行对比。
事件是面对对象中对象间通信的方法。事件发生者(又叫事件源)发生一个事件时,通过发送一条消息,给事件接受者(事件处理者),事件接受者可以做出响应的处理。比如在某登录界面中,单击一个按钮,系统会验证用户的用户名和密码是否正确。用户单击按钮后,按钮(事件源)发出了单击事件,产生了自己被单击的消息给窗体,窗体(事件接受者)在自身代码窗口中进行响应的处理。
我们分别看下在vb和vb.net中是怎么实现事件机制的。
在vb6中,使用Event关键字定义事件,raiseEvent发出事件消息,在接受者的类中使用WithEvent表明自己是某个类的事件的接受者,我们看这样两段代码:
首先建立一个窗体,是一个登录窗体,输入用户名和密码后,点击登陆按钮可以登陆,代码(vb6)如下,使用了WithEvent来接收验证类(verifyClass)的消息:
Option Explicit '本句代码表明该窗体能接受验证类的事件消息 Private WithEvents vfClass As VerifyClass Private Sub cmdLogin_Click() '定义用户名和密码 Dim userName As String Dim password As String '定义返回结果 Dim Result As Boolean Set vfClass = New VerifyClass userName = txtUserName.Text password = txtPassword.Text '将用户名和密码传到验证类进行验证 Result = vfClass.Verify(userName, password) End Sub Private Sub Form_Load() End Sub '引发验证失败事件后,在此处可以进行相应处理 Private Sub vfClass_loginFail(ByVal userName As String) MsgBox (userName + "登录失败") End Sub '验证成功事件 Private Sub vfClass_LoginSuccess(ByVal userName As String) MsgBox (userName + "登录成功") End Sub接下来添加一个类模块,是登陆窗体中用到的验证类(verifyClass)的代码,里面定义(Event)了并引发(raiseEvent)了事件:
Option Explicit '定义验证成功和失败的事件 Public Event LoginSuccess(ByVal userName As String) Public Event loginFail(ByVal userName As String) '验证方法:对用户名和密码进行验证 Public Function Verify(ByVal userName As String, ByVal password As String) As Boolean Dim blnResult As Boolean If userName = "123" And password = "123" Then '如果正确,发出登陆成功的消息 RaiseEvent LoginSuccess(userName) blnResult = True Else '错误则发出登陆失败的消息 RaiseEvent loginFail(userName) blnResult = False End If Verify = blnResult End Function
在vb.net中事件的实现机制同vb基本相同,并且有了优化,通过Handles关键字,使事件实现的机制更灵活,handles可以使多个事件到同一个事件处理程序:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button3.Click System.Windows.Forms.MessageBox.Show("我被触发了") End Sub
也可以通过AddHandler动态的绑定事件处理程序,即可以根据当时的条件选择将要绑定的事件处理程序,看下面这个例子。
首先定义一个person类,有走路这个事件,在走路方法中触发走路事件
Public Class Person Public Event walked(ByVal Distance As Integer) Public Sub walk(ByVal Distance As Integer) RaiseEvent walked(Distance) End Sub End Class
接下来新建一个窗体类,窗体上有一个文本框和一个按钮,代码如下
Public Class Form1 '本句代码表明该窗体能接受验证类的事件消息 Public WithEvents objPerson As Person Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click objPerson = New Person() '满足条件下才执行绑定操作 If (TextBox1.Text = "1") Then '满足条件,执行动态绑定,将事件绑定到某方法,该方法转变成事件处理程序 AddHandler objPerson.walked, AddressOf Person_walk objPerson.walk(50) Else System.Windows.Forms.MessageBox.Show("您输入的文本不是1") End If End Sub '触发的事件将绑定到本事件处理程序 Public Sub Person_walk(ByVal Distance As Integer) System.Windows.Forms.MessageBox.Show("a person walked" + Distance.ToString() + " kilometer!") End Sub End Class
这就是vb和vb.net的事件处理机制,等学了java事件机制后将进行对比。
相关文章推荐
- vb和vb.net事件机制
- VB.NET中的事件与委托(警察抓小偷)
- Henry的VB.NET之旅(十五)—动态事件处理方法
- asp.net ajax的事件机制小议
- C# 和vb.net事件
- Henry的VB.NET之旅(十四)—动态关联事件与处理程序
- 基于事件通知的线程等待(vb.net)
- vb.net中用户自定义控件中属性、方法、事件的理解
- 这么详细的分类 VB/VB.NET源代码网站你见过没有? VB/VB.NET中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- [转]对.NET Framework "事件"机制理解的代码分析
- vb.net 2005 类事件的使用
- Henry的VB.NET之旅(十三)—标准事件处理程序
- vb.net反射机制
- VB.NET扩展WebBrowser,拥有跳转前获取URL的能力 ,扩展事件
- [VB.NET]VB2005能获得鼠标点击激发浏览器IE事件吗?
- vb.net treeView的同一个节点第二次点击(连续),不执行事件
- C++ 事件机制实现(转载自http://blog.csdn.net/khler/archive/2007/08/07/1729638.aspx)
- [转载]VB.net入门(6):类~构造函数,事件
- VB.Net 动态添加和移除事件
- vb.net WPF webbrowser window.close 关闭后不触发 WindowClosing 事件 WNDPROC解决方式