vb和vb.net事件机制
学习java事件前,回顾了下vb6和vb.net的事件机制,总结在这里,供对比用。
事件是面对对象中对象间通信的方法。事件发生者(又叫事件源)发生一个事件时,通过发送一条消息,给事件接受者(事件处理者),事件接受者可以做出响应的处理。比如在某登录界面中,单击一个按钮,系统会验证用户的用户名和密码是否正确。用户单击按钮后,按钮(事件源)发出了单击事件,产生了自己被单击的消息给窗体,窗体(事件接受者)在自身代码窗口中进行响应的处理。
我们分别看下在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事件机制的更多相关文章
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...
- tkinter事件机制
一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...
- [解惑]JavaScript事件机制
群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”. 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会 ...
- Atitit 数据库的事件机制--触发器与定时任务attilax总结
Atitit 数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...
- 深入浅出iOS事件机制
原文地址: http://zhoon.github.io/ios/2015/04/12/ios-event.html 本文章将讲解有关iOS事件的传递机制,如有错误或者不同的见解,欢迎留言指出. iO ...
- Java 事件机制
java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...
- Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
随机推荐
- IOS学习之路二十四(UIImageView 加载gif图片)
UIImageView 怎样加载一个gif图片我还不知道(会的大神请指教),不过可以通过加载不同的图片实现gif效果 代码如下: UIImageView* animatedImageView = [[ ...
- HDU 1358 Period KMP
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1358 求周期问题,简单KMP—— AC代码: #include <iostream> # ...
- bootstrap基础样式使用
<small> 为了给段落添加强调文本,则可以添加 class="lead" <small>本行内容是在标签内</small><br> ...
- Jmeter 发送json{Jfinal 接口req rsp均为json}
链接地址:http://yangyoupeng-cn-fujitsu-com.iteye.com/blog/2013649 使用jmeter发送json数据.方法有三种 原创,转载请注明出处 1.利用 ...
- PLSQL developer登录身份证明检索失败的解决办法
全都在一个下图中:
- plsql 的循环之 goto
实例: /* 测试goto 的用法, */ procedure test_loop_go(pi_aab001 in number, po_fhz out varchar2, po_msg out va ...
- js实现input输入框只能输入数字的功能
<input type="text" style="ime-mode:disabled;" onpaste="return false;&quo ...
- Introduction to REST #Reprinted#
from http://www.cnblogs.com/shanyou/archive/2012/05/12/2496959.html dudu的 HttpClient + ASP.NET Web A ...
- Java疯狂讲义(三)
- LinuxC安装gcc
使用centos进行C编程的时候使用gcc hello.c提示 bash:gcc:command not found 此时需要给Linux安装gcc命令如下 1 yum -y install gcc ...