vb和vb.net事件机制

时间:2022-11-12 07:57:05

学习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事件机制的更多相关文章

  1. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  2. 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)

    前言 这篇博客有点长,如果你是高手请您读一读,能对其中的一些误点提出来,以免我误人子弟,并且帮助我提高 如果你是javascript菜鸟,建议您好好读一读,真的理解下来会有不一样的收获 在下才疏学浅, ...

  3. tkinter事件机制

    一.tkinter.Event tkinter的事件机制跟js是一样的,也是只有一个Event类,这个类包罗万象,集成了键盘事件,鼠标事件,包含各种参数. 不像java swing那种强类型事件,sw ...

  4. [解惑]JavaScript事件机制

    群里童鞋问到关于事件传播的一个问题:“事件捕获的时候,阻止冒泡,事件到达目标之后,还会冒泡吗?”. 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会 ...

  5. Atitit  数据库的事件机制--触发器与定时任务attilax总结

    Atitit  数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...

  6. 深入浅出iOS事件机制

    原文地址: http://zhoon.github.io/ios/2015/04/12/ios-event.html 本文章将讲解有关iOS事件的传递机制,如有错误或者不同的见解,欢迎留言指出. iO ...

  7. Java 事件机制

    java事件机制包括三个部分:事件.事件监听器.事件源. 1.事件.一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息,用于listener的相应的方法之中,作 ...

  8. Angular $scope和$rootScope事件机制之$emit、$broadcast和$on

    Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ...

  9. JavaScript 详说事件机制之冒泡、捕获、传播、委托

    DOM事件流(event  flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event  capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...

随机推荐

  1. Spark入门实战系列--1.Spark及其生态圈简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...

  2. 门店 车销 批发送货 商超 快销专用扫描打印开单手持PDA移动销售管理系统

    门店 车销 批发送货 商超 快销专用扫描打印开单手持PDA移动销售管理系统的详细介绍 一. 以PDA等移动终端为媒介,随时随地掌握门店信息. 二. 后台集成了数据统计.多指标分析.销售.库存.会员管理 ...

  3. Linux下更好用的帮助命令—cheat

    导读 Linux系统中,我们经常会用man命令来帮助查看这个命令的具体用法,man是很强大的,但是英语不好的同学用man用起来可能不那么顺手,自然而然的就出现了cheat命令,cheat命令就是通过简 ...

  4. TestNG运作报错An interanl error occurred during&colon;&quot&semi;Launching first&quot&semi;

    备注:我建的类名就叫做“first” 解决办法:卸载掉TestNG M2E Help-->Install new software-->What is already installed? ...

  5. Android中不混淆类中函数

    情况一:混淆不同的函数aTest.bTest -keep class com.zony.Test { void aTest(byte[], int, int); void bTest(String, ...

  6. Servlet过滤器——异常捕获过滤器

    1.概述 介绍如何实现异常捕获过滤器. 2.技术要点 本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获 ...

  7. spring注解大全

    出自http://www.cnblogs.com/xiaoxi/p/5935009.html 1.@Autowired @Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面 ...

  8. Linux的发行版,不同发行版之间的联系和区别

    Linux 主要作为Linux发行版(通常被称为"distro")的一部分而使用.这些发行版由个人,松散组织的团队,以及商业机构和志愿者组织编写.它们通常包括了其他的系统软件和应用 ...

  9. 【优秀的图片后期编辑工具】Luminar 3&period;1 for Mac

     [简介] 今天和大家分享最新的 Luminar for Mac 3.1 版本,支持中文界面,Luminar是一款Mac上优秀的图片后期处理工具,功能类似 Photoshop Lightroom 等软 ...

  10. Speech Synthesis

    <Window x:Class="Synthesizer.MainWindow" xmlns="http://schemas.microsoft.com/winfx ...