-
vb.net教程之vb.net的事件和事件处理
vb.net的事件和事件处理
有的时候,用户可能觉得Visual Studio的工程是一系列的顺序发生的过程,但是在大多数情况下,其实程序是事件驱动的(event driven)---也就是说,程序的运行都是取决于一些诸如点击键盘,点击鼠标以及一些用户自定义的事件。不象线性进行的程序那样,它在有些时候不可能决定是要运行哪一个事件驱动的特定过程。事件对现在的编程而言可以说是一个基本的组成部分,因为这些事件可以让用户写出能对对象之外的世界做出反应的程序,诸如用户的输入和其他对象输入的信息。
1.事件
事件是用来告知应用程序,一些重要的事情的发生。例如,当用户点击了窗体中的一个控件时,一个Click事件被触发了,并且可以调用一个事件处理过程。事件也可以让一些不相关的过程联系在一起。例如,有一个过程需要做很多事情,诸如一系列的操作,用户可以把一系列的事件组成一个独立的线程。如果用户决定要取消一个操作,应用程序可以发出一个cancel事件,来阻止这一系列操作的进行。
2.事件发送器
一个可以引发一个事件的对象是一个事件发送器,例如:窗体、控件以及用户定义的对象。
3.事件的声明
在类中,事件的声明是用关键字Event来进行的。例如:
Event AnEvent(Byval EventNumber As Integer)
4.事件的引发
事件就象一件非常重要的事情发生了,而宣布这件重要的事情的行为就叫做事件的引发。从实践的角度来讲,一个事件不能象方法那样被使用,就如同不能用Button1.Click去引发一个button的点击事件一样。事件必须使用RaiseEvent关键字来引发。下面的例子引发了一个名为AnEvent的事件:
RaiseEvent AnEvent(EventNumber)
5.事件的处理
事件的处理是当一个相关事件发生以后调用的一个过程,如果用户在编辑环境下双击一个窗体上的一个控件,或者从属性窗口的下拉框中选择一个事件的话,vb.net将会自动建立一个事件处理过程。Visual Basic使用标准的约定的表述来命名这个过程,这种命名方法就是把事件的发生器(引发事件的对象)和事件的名称用下划线连起来。例如,名为button1的点击事件可以这样表示:
sub button1_click
用户可以用这种命名法对自己定义的事件进行命名,但是如果用户用了Handles关键字的话就没有必要这样做了。
6.把事件和事件处理联系起来
在一个事件处理可以使用之前,用户需要把它和一个事件用WithEvents或者AddHandler联系起来。
WithEvents的陈述和Handles从句声明一个事件处理的方法,无论是怎样的WithEvents变量,分配的对象都能够激发一个特定的事件的处理。
AddHandler和RemoveHandle陈述能够允许用户动态地连接和断开事件与事件处理的过程。
在有些情况下,例如把一些事件和一些标准的控件联系,vb.net将会把事件处理和一个事件联系在一起。例如,在vb.net先前的版本的设计环境中,用户可以双击一个按钮控件,然后一个空的事件处理过程就产生了,用户可以在里面加入代码,在代码的背后,Visual Basic通过隐型地产生一个WithEvents变量就可以把事件处理过程和事件联系起来,这个空的事件处理过程如下:
Private Sub Command1_Click()
End Sub
正如这个过程一样,vb.net也可以通过在设计环境下双击一个按钮控件来建立一个事件处理过程,下面就是当双击一个按钮控件以后,系统自动生成的代码:
Private WithEvents Button1 As System.WinForms.Button
Proteced Sub Button1_Click(Byval sender As System.Object,_
Byval e As System.EventArgs)
End Sub
虽然从代码本身来看有很多不同,但是事件处理是一样的。新加的参数对于控件的事件处理而言是必需的,在大多数情况下,用户并不需要使用它们。
7.给一个类加事件
用户可以通过使用Events表述来声明一个类的事件,声明包含了事件的名称和参数。
首先,在定义类的类模块的声明栏中使用Event陈述声明一个有参数的事件,例如:
Public Event PercentDone(Byval Percent AS Single,_
ByRefCancel As Boolean)
事件总是被声明为公有的,而且,事件没有返回值、可选参数或者数组参数。
给一个类加一个事件说明了只要是这种类的对象就能够引发这种特定的事件,用户需要使用RaiseEvent表述来让一个事件真正运行起来,一旦事件运行起来以后,用户就可以使用WithEvents或者AddHandler把事件和事件处理过程联系起来。
8.事件处理过程
用户可以使用WithEvents和AddHandler关键字编写事件处理过程。
用WithEvents处理事件:
(1)在能够处理事件的模块的声明栏中,用关键字WithEvents加入类的变量,这个变量必须是一个模块级的变量。
(2)在代码编辑环境的左边的下拦框中,选择用WithEvents声明的变量。
(3)在代码编辑环境的右边的下拉框中,选择希望能处理的事件(如果可能的话,可以对一个对象处理多种事件)。
(4)把代码加入到事件处理过程中,并使用相关的参数。
使用AddHandler处理事件:
AddHandler和RemoveHandler结合起来使用,可以实现WithEvents表述的功能。但是允许用户动态地添加、移除以及改变和事件有关的错误处理。AddHandler有两个参数、事件发送器(比如控件)的名称和一个表达式,这个表达式表明一种委托关系。当用户使用AddHandler时,没有必要显性地声明委托类,对委托关系的引用,可以通过AddressOf来返回。下面的例子把一件事件处理过程和一个按钮的点击事件联系在一起,委托关系来自于建立一个新的System.EventHandler的实例。
AddHandlerButton1.Click.NewSystem.EventHandler(AddressOf
me.Button1ClickEventHandler
(1)要处理事件的模块的声明栏中加入一个类的变量。
(2)用AddHandler表述并且表明事件发送器的名称,以及含有事件处理过程的AddressOf表述代码。例如:
Dim h As New HH()
AddHandler h.Oevent,AddressOf Me.handleTheEvent
有的时候,用户可能觉得Visual Studio的工程是一系列的顺序发生的过程,但是在大多数情况下,其实程序是事件驱动的(event driven)---也就是说,程序的运行都是取决于一些诸如点击键盘,点击鼠标以及一些用户自定义的事件。不象线性进行的程序那样,它在有些时候不可能决定是要运行哪一个事件驱动的特定过程。事件对现在的编程而言可以说是一个基本的组成部分,因为这些事件可以让用户写出能对对象之外的世界做出反应的程序,诸如用户的输入和其他对象输入的信息。
1.事件
事件是用来告知应用程序,一些重要的事情的发生。例如,当用户点击了窗体中的一个控件时,一个Click事件被触发了,并且可以调用一个事件处理过程。事件也可以让一些不相关的过程联系在一起。例如,有一个过程需要做很多事情,诸如一系列的操作,用户可以把一系列的事件组成一个独立的线程。如果用户决定要取消一个操作,应用程序可以发出一个cancel事件,来阻止这一系列操作的进行。
2.事件发送器
一个可以引发一个事件的对象是一个事件发送器,例如:窗体、控件以及用户定义的对象。
3.事件的声明
在类中,事件的声明是用关键字Event来进行的。例如:
Event AnEvent(Byval EventNumber As Integer)
4.事件的引发
事件就象一件非常重要的事情发生了,而宣布这件重要的事情的行为就叫做事件的引发。从实践的角度来讲,一个事件不能象方法那样被使用,就如同不能用Button1.Click去引发一个button的点击事件一样。事件必须使用RaiseEvent关键字来引发。下面的例子引发了一个名为AnEvent的事件:
RaiseEvent AnEvent(EventNumber)
5.事件的处理
事件的处理是当一个相关事件发生以后调用的一个过程,如果用户在编辑环境下双击一个窗体上的一个控件,或者从属性窗口的下拉框中选择一个事件的话,vb.net将会自动建立一个事件处理过程。Visual Basic使用标准的约定的表述来命名这个过程,这种命名方法就是把事件的发生器(引发事件的对象)和事件的名称用下划线连起来。例如,名为button1的点击事件可以这样表示:
sub button1_click
用户可以用这种命名法对自己定义的事件进行命名,但是如果用户用了Handles关键字的话就没有必要这样做了。
6.把事件和事件处理联系起来
在一个事件处理可以使用之前,用户需要把它和一个事件用WithEvents或者AddHandler联系起来。
WithEvents的陈述和Handles从句声明一个事件处理的方法,无论是怎样的WithEvents变量,分配的对象都能够激发一个特定的事件的处理。
AddHandler和RemoveHandle陈述能够允许用户动态地连接和断开事件与事件处理的过程。
在有些情况下,例如把一些事件和一些标准的控件联系,vb.net将会把事件处理和一个事件联系在一起。例如,在vb.net先前的版本的设计环境中,用户可以双击一个按钮控件,然后一个空的事件处理过程就产生了,用户可以在里面加入代码,在代码的背后,Visual Basic通过隐型地产生一个WithEvents变量就可以把事件处理过程和事件联系起来,这个空的事件处理过程如下:
Private Sub Command1_Click()
End Sub
正如这个过程一样,vb.net也可以通过在设计环境下双击一个按钮控件来建立一个事件处理过程,下面就是当双击一个按钮控件以后,系统自动生成的代码:
Private WithEvents Button1 As System.WinForms.Button
Proteced Sub Button1_Click(Byval sender As System.Object,_
Byval e As System.EventArgs)
End Sub
虽然从代码本身来看有很多不同,但是事件处理是一样的。新加的参数对于控件的事件处理而言是必需的,在大多数情况下,用户并不需要使用它们。
7.给一个类加事件
用户可以通过使用Events表述来声明一个类的事件,声明包含了事件的名称和参数。
首先,在定义类的类模块的声明栏中使用Event陈述声明一个有参数的事件,例如:
Public Event PercentDone(Byval Percent AS Single,_
ByRefCancel As Boolean)
事件总是被声明为公有的,而且,事件没有返回值、可选参数或者数组参数。
给一个类加一个事件说明了只要是这种类的对象就能够引发这种特定的事件,用户需要使用RaiseEvent表述来让一个事件真正运行起来,一旦事件运行起来以后,用户就可以使用WithEvents或者AddHandler把事件和事件处理过程联系起来。
8.事件处理过程
用户可以使用WithEvents和AddHandler关键字编写事件处理过程。
用WithEvents处理事件:
(1)在能够处理事件的模块的声明栏中,用关键字WithEvents加入类的变量,这个变量必须是一个模块级的变量。
(2)在代码编辑环境的左边的下拦框中,选择用WithEvents声明的变量。
(3)在代码编辑环境的右边的下拉框中,选择希望能处理的事件(如果可能的话,可以对一个对象处理多种事件)。
(4)把代码加入到事件处理过程中,并使用相关的参数。
使用AddHandler处理事件:
AddHandler和RemoveHandler结合起来使用,可以实现WithEvents表述的功能。但是允许用户动态地添加、移除以及改变和事件有关的错误处理。AddHandler有两个参数、事件发送器(比如控件)的名称和一个表达式,这个表达式表明一种委托关系。当用户使用AddHandler时,没有必要显性地声明委托类,对委托关系的引用,可以通过AddressOf来返回。下面的例子把一件事件处理过程和一个按钮的点击事件联系在一起,委托关系来自于建立一个新的System.EventHandler的实例。
AddHandlerButton1.Click.NewSystem.EventHandler(AddressOf
me.Button1ClickEventHandler
(1)要处理事件的模块的声明栏中加入一个类的变量。
(2)用AddHandler表述并且表明事件发送器的名称,以及含有事件处理过程的AddressOf表述代码。例如:
Dim h As New HH()
AddHandler h.Oevent,AddressOf Me.handleTheEvent
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比