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事件时,浏览器会 ...
随机推荐
- 在windows下配置对github的操作--基本操作
一.下载安装 git for widows软件 git for widows 是专门用来在windows下操作 github的软件,提供bash(命令行) 和 gui两种方式. 在bash下,其实就是 ...
- Oracle 动态查询,EXECUTE IMMEDIATE select into使用方法
create or replace procedure TEST_TABLE is l_table_name varchar2(50); query_stat varchar2(100); l_zyq ...
- beini破解无线
软件介绍 当你的笔记本有无线网卡却不能上网的时刻,也许你会很焦急. 又或许你的隔壁就有无线网络可以接的时刻,但你却由于米有密码而不能上网.下面我将简介一款可以令你惊讶的软件,奶瓶 有了奶瓶以上疑问都可 ...
- 请求接口获取到的数据其中出现null值,处理的时候导致了程序crash,解决方案如下:
第一种方法是使用分类给字典添加一个类方法,将字典中的null值全部替换为空字符串,代码如下: .h文件代码: @interface NSDictionary (DeleteNull) + (id)ch ...
- c语言: inline(gcc)
从汇编的角度看inline函数与非inline函数http://blog.csdn.net/cxmanzhao/article/details/6801786 强制内联和强制不内联http://blo ...
- 【随手记-有空整理】Linux随手记
1. CentOS6.5安装g++:yum install gcc-c++ 注意如果写成yum install g++会提示No package g++ available. 2. XShell下打开 ...
- Python之路Day19
志不坚者智不达. 主要内容:Django分页.自定义simpletag.权限管理 Django分页 Django自带了一个分页功能,使用起来很方便.官方文档 先来看一下效果图: 后台代码: def c ...
- 使用 Async 和 Await 的异步编程 #Reprinted#
异步方法容易编写 string urlContents = await client.GetStringAsync(); 以下特征总结了使上面一个异步方法. 方法签名包含一个 Async 或async ...
- Linux学习:netstat命令
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态等.对于开发来说,很多时候用于查看端口占用情况. 执行netstat命令,其输出结果可以分成两部分: 1)一是“Active ...
- elk 架构