Access数据库对象的事件顺序
时 间:2016-09-22 08:06:40
作 者:易勋 ID:35404 城市:上海
摘 要:单个操作,如移动从一个控件对象到另一个控件,可以触发几种不同的事件,出现在特定的序列。了解发生的事件和按什么顺序他们发生很重要,因为它可能会影响您的宏或事件过程如何以及何时运行。例如,如果要按特定顺序运行的两个事件过程,您希望确保它们与相关联的事件发生的相同顺序。
正 文:
数据库对象的事件顺序
本文内容
窗体上控件的事件顺序
窗体上记录的事件顺序
窗体和子窗体的事件顺序
键击和鼠标单击的事件顺序
报表和报表节的事件顺序
窗体上控件的事件顺序
当您将焦点移至控件上时,以及当您更改并更新控件中的数据时,窗体上的控件会发生一些事件。
注意: Microsoft Office Access 在 Visual Basic 编辑器中显示事件名称的方式与它在属性表和宏生成器中显示事件名称的方式略有不同。例如,在窗体的属性表和宏生成器中名为 On Got Focus 的事件在 Visual Basic 编辑器中名为 GotFocus。本文中的示例为事件名称使用 Visual Basic for Applications (VBA) 格式。
将焦点移动到控件上
将焦点移动到窗体上的控件上时(例如,通过打开包含一个或多个活动控件的窗体,或通过将焦点移至同一窗体上的另一控件上),Enter 和 GotFocus 事件会按以下顺序发生:
Enter GotFocus
打开窗体时,Enter 和 GotFocus 事件会在与打开窗体相关联的事件(如 Open、Activate 和 Current)之后发生,如下所示:
Open(窗体) Activate(窗体)
Current(窗体)
Enter(控件)
GotFocus(控件)
当焦点离开窗体上的控件时(例如,当关闭包含一个或多个活动控件的窗体时,或者当移至同一窗体上的另一控件时),Exit 和LostFocus 事件会按以下顺序发生:
Exit LostFocus
关闭窗体时,Exit 和 LostFocus 事件会在与关闭窗体相关联的事件(如 Unload、Deactivate 和 Close)之前发生,如下所示:
Exit(控件) LostFocus(控件)
Unload(窗体)
Deactivate(窗体)
Close(窗体)
更改和更新控件中的数据
如果在窗体上的控件中输入或更改数据,然后将焦点移至其他控件上,则会发生 BeforeUpdate 和 AfterUpdate 事件:
更新前 AfterUpdate
其值发生更改的控件的 Exit 和 LostFocus 事件在 BeforeUpdate 和 AfterUpdate 事件之后发生:
BeforeUpdate AfterUpdate
Exit
LostFocus
当更改文本框或组合框的文本框部分中的文本时,会发生 Change 事件。只要控件的内容发生变化,就会发生此事件,但它在您将焦点移至不同控件或记录上之前发生(即在 BeforeUpdate 和 AfterUpdate 事件发生之前发生)。对于您在文本框或组合框的文本框部分中按的每个键,都会发生下面一系列事件:
KeyDown KeyPress
Dirty
Change
KeyUp
不在列表事件发生的组合框的列表中找不到组合框中输入值,然后尝试将焦点移到另一个控件或记录。不在列表事件键盘事件和事件之后发生更改为组合框中,但之前对任何其他控件或窗体的事件。如果组合框中的限于列表属性设置为Yes,不在列表事件后立即出现的窗体的错误事件 ︰
KeyDown KeyPress
Dirty
Change
KeyUp
NotInList
Error
窗体上记录的事件顺序
在将焦点移至其他记录、更新记录中的数据、删除现有记录或创建新记录时,窗体上的记录会发生一些事件。
将焦点移至记录上并更新记录中的数据
如果将焦点移至窗体上的现有记录,输入或更改记录中的数据,然后将焦点移至另一记录上,则窗体会发生下面一系列事件:
Current(窗体) BeforeUpdate(窗体)
AfterUpdate(窗体)
Current(窗体)
在保留其数据已改变的记录时,在输入下一记录之前,具有焦点的控件会发生 Exit 和 LostFocus 事件。这些事件在窗体的BeforeUpdate 和 AfterUpdate 事件之后发生,如下所示:
BeforeUpdate(窗体) AfterUpdate(窗体)
Exit(控件)
LostFocus(控件)
RecordExit(窗体)
Current(窗体)
在窗体上的控件间移动焦点时,每个控件都会发生一些事件。例如,当您执行下列操作时,会发生下面几个系列的事件:
-
打开窗体并更改控件中的数据:
Current(窗体)
Enter(控件)
GotFocus(控件)
BeforeUpdate(控件)
AfterUpdate(控件)
-
将焦点移动到其他控件上:
Exit(控件 1)
LostFocus(控件 1)
Enter(控件 2)
GotFocus(控件 2)
-
将焦点移动到其他记录上:
更新前(表单)
更新后(表单)
退出控制 (2)
LostFocus控制 (2)
记录退出时(表单)
当前(表单)
删除记录
删除记录时,窗体会发生下列事件,并且 Microsoft Office Access 会显示一个对话框,询问您确认删除操作:
Delete BeforeDelConfirm
AfterDelConfirm
如果取消 Delete 事件,则不会发生 BeforeDelConfirm 和 AfterDelConfirm 事件,并且不会显示该对话框。
创建新记录
如果将焦点移至窗体上的新(空白)记录,然后通过在控件中键入数据创建新记录,则会发生下面一系列事件:
Current(窗体) Enter(控件)
GotFocus(控件)
BeforeInsert(窗体)
AfterInsert(窗体)
窗体上控件以及新记录的 BeforeUpdate 和 AfterUpdate 事件在 BeforeInsert 事件之后,AfterInsert 事件之前发生。
窗体和子窗体的事件顺序
当您打开或关闭窗体、在窗体之间移动或者处理窗体或子窗体上的数据时,窗体会发生一些事件。
打开和关闭窗体
当您打开窗体时,窗体会发生下面一系列事件:
Open Load
Resize
Activate
Current
如果窗体上没有活动控件,则窗体的 GotFocus 事件会在 Activate 事件之后,Current 事件之前发生。
关闭窗体时,窗体会发生下面一系列事件:
Unload Deactivate
Close
如果没有任何活动控件在表单上,卸载事件之后、 之前停用事件, LostFoc我们事件发生的窗体。
在窗体之间移动
在两个打开的窗体之间切换时,第一个窗体会发生 Deactivate 事件,第二个窗体会发生 Activate 事件:
Deactivate(窗体 1) Activate(窗体 2)
在 Access 中从某个窗体切换到另一个对象选项卡时,该窗体会发生 Deactivate 事件。但是,当切换到对话框、其 PopUp 属性设置为“是”的窗体或另一程序中的窗口时,不会发生 Deactivate 事件。
注意: 如果将焦点移至已经打开的窗体上,则不会发生 Open 事件,即使已通过执行 OpenForm 操作将焦点移至该窗体上也是如此。
处理窗体上的数据
在窗体中的记录之间移动并更改数据时,会发生窗体和控件事件。例如,在第一次打开窗体时,会发生下面一系列事件:
Open(窗体) Load(窗体)
Resize(窗体)
Activate(窗体)
Current(窗体)
Enter(控件)
GotFocus(控件)
同样,当关闭窗体时,会发生下面一系列事件:
退出(控件) LostFocus(控件)
卸载(表单)
停用(表单)
关闭(表单)
如果已经更改了控件中的数据,则控件和窗体的 BeforeUpdate 和 AfterUpdate 事件都会在控件的 Exit 事件之前发生。
使用子窗体
在打开包含子窗体的窗体时,会在主窗体之前加载子窗体及其记录。因此,子窗体及其控件的事件(如 Open、Current、Enter和 GotFocus)会在窗体事件之前发生。但是,子窗体不会发生 Activate 事件。因此,打开主窗体只会为主窗体触发 Activate 事件。
同样,当关闭包含子窗体的窗体时,会在该窗体之后卸载子窗体及其记录。子窗体不会发生 Deactivate 事件。因此,关闭主窗体只会为主窗体触发 Deactivate 事件。控件、窗体和子窗体的事件按以下顺序发生:
-
子窗体的控件的事件(如 Exit 和 LostFocus)
-
窗体的控件(包括子窗体控件)的事件
-
窗体的事件(如 Deactivate 和 Close)
-
子窗体的事件
注意: 因为子窗体的事件在主窗体关闭之后发生,所以某些事件(如从子窗体的事件取消关闭主窗体)将不会发生。您可能需要将这些类型的验证测试移至主窗体的事件。
键击和鼠标单击的事件顺序
如果在窗体或控件具有焦点时按某个键或发送键击,则窗体和控件会发生键盘事件。如果在鼠标指针位于窗体、节或控件上时单击鼠标按钮,则窗体、窗体节以及窗体上的控件会发生鼠标事件。在窗体、节或控件上移动鼠标指针时,也会发生鼠标事件。
键盘事件
如果您在窗体上的控件具有焦点时按下并释放某个键(或者使用 SendKeys 操作或语句发送键击),会发生下面一系列事件:
KeyDown KeyPress
KeyUp
当您按下然后释放某个键或者在 ANSI 字符集中发送键击时,会发生 KeyDown、KeyPress 和 KeyUp 事件。如果按住 ANSI 键,则会交替重复发生 KeyDown 和 KeyPress 事件(KeyDown、KeyPress、KeyDown、KeyPress 等),直到您释放该键,之后会发生 KeyUp 事件。
如果按下然后释放非 ANSI 键,则会发生 KeyDown 和 KeyUp 事件。如果按住非 ANSI 键,则会重复发生 KeyDown 事件,直到您释放该键,之后会发生 KeyUp 事件。
如果按某个键会为控件触发其他事件,则该事件会在 KeyPress 事件之后,KeyUp 事件之前发生。例如,如果键击更改文本框中的文本(这会触发 Change 事件),则会发生下面一系列事件:
KeyDown KeyPress
Change
KeyUp
如果键击导致焦点从一个控件移至另一个控件上,则第一个控件会发生 KeyDown 事件,而第二个控件会发生 KeyPress 和KeyUp 事件。例如,如果更改控件中的数据,然后按 Tab 键以移至下一个控件,则会发生下面几个系列的事件:
-
第一个控件:
KeyDown
BeforeUpdate
AfterUpdate
Exit
LostFocus
-
第二个控件:
Enter
GotFocus
KeyPress
KeyUp
鼠标事件
如果您在鼠标指针位于窗体上的控件上时单击并释放鼠标按钮,则该控件会发生下面一系列事件:
MouseDown MouseUp
Click
如果某控件具有焦点并且您单击另一控件以将焦点移至此第二个控件上,则会发生下面几个系列的事件:
-
第一个控件:
Exit
LostFocus
-
第二个控件:
Enter
GotFocus
MouseDown
MouseUp
Click
如果您移至另一条记录,然后单击某个控件,则窗体的 Current 事件也会在该控件的 Enter 事件之前发生。
双击某个控件会导致 Click 和 DblClick 事件发生。例如,如果双击除命令按钮以外的控件,则该控件会发生下面一系列事件:
鼠标 自己 MouseUp
单击
DblClick
MouseUp
当双击命令按钮时,会发生上面一系列事件,之后会发生第二个 Click 事件。
当您在窗体、节或控件上移动鼠标指针时,窗体、节或控件会发生 MouseMove 事件。此事件与其他鼠标事件无关。
报表和报表节的事件顺序
在打开报表以打印或预览它时,或者在关闭报表时,报表和报表节会发生一些事件。
报表事件
如果打开报表以打印或预览它,然后关闭报表或移至 Access 中的另一对象选项卡,报表会发生下面一系列事件:
Open Activate
Close
Deactivate
当在两个打开的报表间切换时,第一个报表会发生 Deactivate 事件,第二个报表会发生 Activate 事件:
Deactivate(报表 1) Activate(报表 2)
当从报表切换到 Access 中的另一对象选项卡时,也会发生报表的 Deactivate 事件。但是,当切换到对话框、其 PopUp 属性设置为“是”的窗体或另一程序中的窗口时,不会发生 Deactivate 事件。
当打开基于查询的报表时,Access 会先为报表触发 Open 事件,然后再运行基础查询。因此,您可以使用响应 Open 事件的宏或事件过程为报表设置条件。例如,宏或事件过程可打开自定义对话框,以供您在其中输入报表条件。
报表节事件
当打印或预览报表时,报表节的 Format 和 Print 事件会在报表的 Open 和 Activate 事件之后,报表的 Close 或 Deactivate 事件之前发生:
Open(报表) Activate(报表)
Format(报表节)
Print(报表节)
Close(报表)
Deactivate(报表)
此外,在格式设置期间或之后,Print 事件之前,会发生下列事件:
-
当 Access 在报表格式设置期间返回到上一个节时,会发生 Retreat 事件。
-
如果报表未显示任何记录,则会发生 NoData 事件。
-
Page 事件在格式设置之后,打印之前发生。您可以使用此事件自定义打印出的报表的外观。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)
- 统计当月之前(不含当月)的记录数怎...(03.11)