Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

单一操作(例如从一个对象上的控件移动到另一控件)可以触发多个不同的事件,这些事件按特定顺序发生。 了解事件发生的时间和顺序非常重要,因为这会影响宏或事件过程的运行方式和运行时间。 例如,如果有两个事件过程将按特定顺序运行,则需要确保关联的事件以相同顺序发生。

本文内容

窗体上控件事件的顺序

将焦点移动到控件以及在控件中更改和更新数据时,窗体上会发生控件事件。

注意: Microsoft Office Access 在 Visual Basic 编辑器中显示的事件名称与在属性表和“宏生成器”中显示的名称略有不同。 例如,窗体的属性表和“宏生成器”中名为“获得焦点”(On Got Focus) 的事件在 Visual Basic 编辑器中名为 GotFocus。 本文中的示例对事件名称使用 Visual Basic for Applications (VBA) 格式。

将焦点移动到控件

将焦点移动到窗体上的控件时(例如,打开包含一个或多个活动控件的窗体,或将焦点移动到同一窗体上的其他控件),进入获得焦点事件将按如下顺序发生:

输入 箭头 GotFocus

打开窗体时,进入获得焦点事件将在与打开窗体关联的事件(例如,打开激活成为当前)后发生,如下所示:

打开 (窗体) 箭头激活 当前 (窗体) 箭头窗体 (窗体) 箭头输入 (控件) 箭头GotFocus (控件)

当焦点离开窗体上的控件时(例如,关闭包含一个或多个活动控件的窗体,或将焦点移动到同一窗体上的其他控件),退出失去焦点事件将按如下顺序发生:

退出 箭头 LostFocus

关闭窗体时,退出失去焦点事件将在与关闭窗体关联的事件(例如卸载停用关闭)前发生,如下所示:

退出 (控件) 箭头LostFocus (控件) 箭头卸载 (窗体) 箭头停用 (窗体) 箭头关闭 (窗体)

更改和更新控件中的数据

在窗体上的控件中输入或更改数据,然后将焦点移动到另一控件时,将发生更新前更新后事件:

BeforeUpdate 箭头 Afte rUpdate

其值已更改的控件的退出失去焦点事件在更新前更新后事件后发生:

BeforeUpdate 箭头 AfterUpdate 箭头 Exit 箭头 LostFocus

更改文本框中的文本或组合框的文本框部分中的文本时,将发生更改事件。 只要控件的内容发生更改,此事件就会在将焦点移动到另一控件或记录之前(因此,在更新前更新后事件发生之前)发生。 对于在文本框或组合框的文本框部分中按下的每个键,都会依序发生下列事件:

KeyDown 箭头 KeyPress 箭头 Dirty 箭头 Change 箭头 KeyUp

如果在组合框列表中未列出的组合框中输入一个值,然后尝试将焦点移动到另一个控件或记录,则将发生不在列表中事件。 不在列表中事件发生在组合框的键盘事件和更改事件后,但发生在任何其他控件或窗体事件前。 如果组合框的“限于列表”属性设置为“”,则将在不在列表中事件后立即发生该窗体的出错事件:

KeyDown 箭头 KeyPress 箭头 Dirty 箭头 Change 箭头 KeyUp 箭头 NotInList 0 错误

返回页首

窗体上记录事件的顺序

在将焦点移动到其他记录、更新记录中的数据、删除现有记录或创建新记录时,窗体上会发生记录事件。

将焦点移动到记录并更新记录中的数据

将焦点移动到窗体上的现有记录,在记录中输入或更改数据,然后将焦点移动到另一记录时,将依序发生下列窗体事件:

当前 (窗体) 箭头BeforeUpdate (窗体) 箭头AfterUpdate (窗体) 箭头当前 (窗体)

在离开其数据已发生更改的记录后,对于具有焦点的控件,将在输入下一记录之前发生退出失去焦点事件。 这些事件发生在窗体的更新前更新后事件之后,如下所示:

BeforeUpdate (窗体) 箭头AfterUpdate (窗体) 箭头Exit (控件) 箭头LostFocus (控件) 箭头当前 (窗体)

在窗体上的控件之间移动焦点时,将发生针对每个控件的事件。 例如,执行以下操作时,会依序发生下列事件:

  • 打开窗体,并更改控件中的数据:

    当前 (窗体) 箭头输入 (控件) 箭头GotFocus (控件) 箭头BeforeUpdate (控件) 箭头AfterUpdate (控件)

  • 将焦点移到另一控件:

    Exit (control1) 箭头LostFocus (control1) 箭头Enter (control2) 箭头GotFocus (control2)

  • 将焦点移动到另一记录:

    BeforeUpdate (form) 箭头AfterUpdate (form) 箭头Exit (control2) 箭头LostFocus (control2) 箭头Current (form)

删除记录

删除记录时,将发生下列窗体事件,并且 Microsoft Office Access 会显示一个对话框,请求确认删除:

删除 箭头 BeforeDelConfirm 箭头 AfterDelConfirm

如果取消确认删除前事件,则不会发生确认删除前确认删除后事件,也不会显示对话框。

创建新记录

将焦点移动到窗体上的新(空白)记录,然后通过在控件中键入数据创建新记录时,将依序发生下列事件:

当前 (窗体) 箭头输入 (控件) 箭头GotFocus (控件) 箭头BeforeInsert (窗体) 箭头AfterInsert (窗体)

BeforeInsert (窗体) 事件触发器,只要你开始在 控件中键入。 AfterInsert (窗体) 事件触发器后退出记录。

窗体上的控件和新记录的更新前更新后事件发生在插入前事件之后,插入后事件之前。

返回页首

窗体和子窗体事件的顺序

打开或关闭窗体、在窗体之间移动,或者处理窗体或子窗体上的数据时,将发生窗体事件。

打开和关闭窗体

打开窗体时,将依序发生下列窗体事件:

打开 箭头 加载 箭头 重设大小 箭头 激活当前 箭头

如果窗体上没有活动控件,则窗体的获得焦点事件发生在激活事件之后,成为当前事件之前。

关闭窗体时,将依序发生下列窗体事件:

卸载 箭头 停用 箭头 关闭

如果窗体上没有活动控件,则窗体的失去焦事件发生在卸载事件之后,停用事件之前。

在窗体之间移动

在两个打开的窗体之间切换时,第一个窗体将发生停用事件,第二个窗体将发生激活事件:

停用 (form1) 箭头激活 form2) (

从窗体切换到 Access 中的另一对象选项卡时,该窗体也会发生停用事件。 但是,在切换到对话框、“弹出方式”属性设置为“”的窗体或其他程序中的窗口时,不会发生停用事件。

注意:  如果将焦点移动到已打开的窗体,那么即使是通过执行打开窗体操作将焦点移动到该窗体,也不会发生打开事件。

处理窗体上的数据

在窗体中的记录间移动和更改数据时,将发生窗体事件和控件事件。 例如,首次打开窗体时,将依序发生下列事件:

打开 (窗体) 箭头加载 (窗体) 箭头重设窗体大小 (窗体) 箭头激活当前 (窗体) 箭头(窗体) 箭头输入 (控件)0 GotFocus (控件)

同样,关闭窗体时,将依序发生下列事件:

退出 (控件) 箭头LostFocus (控件) 箭头卸载 (窗体) 箭头停用 (窗体) 箭头关闭 (窗体)

如果更改了控件中的数据,则将在控件的退出事件之前发生控件和窗体的更新前更新后事件。

使用子窗体

打开包含子窗体的窗体时,将在加载主窗体前先加载子窗体及其记录。 因此,子窗体及其控件的事件(例如打开成为当前进入获得焦点)在窗体事件之前发生。 但是,不会发生子窗体激活事件。 因此,打开主窗体仅触发主窗体激活事件。

同样,关闭包含子窗体的窗体时,将在卸载该窗体后卸载子窗体及其记录。 不会发生子窗体停用事件。 因此,关闭主窗体仅触发主窗体停用事件。 控件、窗体和子窗体事件按下列顺序发生:

  1. 子窗体控件事件(例如,退出失去焦点

  2. 窗体控件(包括子窗体控件)事件

  3. 窗体事件(例如,停用关闭

  4. 子窗体事件

注意: 由于子窗体事件在主窗体关闭之后发生,因此不会发生某些事件(例如从子窗体的事件中取消关闭主窗体)。 可能需要将这些类型的验证测试移动到主窗体上的事件。

返回页首

击键和鼠标单击事件的顺序

如果窗体或控件具有焦点,则在按键或发送击键时,将发生窗体和控件的键盘事件。 当鼠标指针悬停在窗体、窗体分区或窗体上的控件上时,单击鼠标按钮会触发该窗体、分区和控件的鼠标事件。 将鼠标指针悬停在窗体、分区或控件上时,也会发生鼠标事件。

键盘事件

如果窗体上的控件具有焦点,则在按下并释放键(或者使用发送键 操作或 语句 发送击键)时,将依序发生下列事件:

KeyDown 箭头 KeyPress 箭头 KeyUp

按下并释放键,或发送 ANSI 字符集 中的击键时,键按下击键键释放事件均会发生。 如果按住一个 ANSI 键,则键按下击键事件会交替发生(键按下击键键按下击键,依此类推),直到释放该键;然后将发生键释放事件。

如果按下并释放一个非 ANSI 键,则将发生键按下键释放事件。 如果按住一个非 ANSI 键,则将反复发生键按下事件,直到释放该键,然后将发生键释放事件。

如果按某个键会触发控件的另一个事件,则该事件在击键事件之后、键释放事件之前发生。 例如,如果某个击键更改了文本框中的文本,从而触发了更改事件,则将依序发生下列事件:

KeyDown 箭头 KeyPress 箭头 Change 箭头 KeyUp

如果击键导致焦点从一个控件移动到另一个控件,则第一个控件将发生键按下事件,而第二个控件将发生击键键释放事件。 例如,如果更改控件中的数据,然后按 TAB 键移到下一个控件,则将依序发生下列事件:

  • 第一个控件:

    KeyDown 箭头 BeforeUpdate 箭头 AfterUpdate 箭头 Exit 箭头 LostFocus

  • 第二个控件:

    输入 箭头 GotFocus 箭头 KeyPress 箭头 KeyUp

鼠标事件

如果鼠标指针悬停在窗体的控件上,则在单击然后释放鼠标按钮时,将依序发生下列控件事件:

MouseDown 箭头 MouseUp 箭头 Click

如果控件具有焦点,则在通过单击将焦点移动到第二个控件时,将依序发生下列事件:

  • 第一个控件:

    退出 箭头 LostFocus

  • 第二个控件:

    输入 箭头 GotFocus 箭头 MouseDown 箭头 MouseUp 箭头 单击

如果移动到另一记录,然后单击控件,则在发生控件的进入事件之前,还将发生窗体的成为当前事件。

双击控件导致单击双击事件均会发生。 例如,双击除命令按钮之外的控件时,将依序发生该控件的下列事件:

MouseD 自己的 箭头 MouseUp 箭头 单击 箭头 DblClick 箭头 MouseUp

双击命令按钮时,将依序发生上述事件,然后再次发生单击事件。

将鼠标指针悬停在窗体、分区或控件上时,窗体、分区或控件将发生鼠标移动事件。 此事件独立于其他鼠标事件。

返回页首

报表和报表区域事件的顺序

打开报表进行打印或预览,或关闭报表时,将发生报表和报表区域事件。

报表事件

打开报表进行打印或预览,然后关闭该报表,或移动到 Access 中的另一对象选项卡时,将依序发生下列报表事件:

打开 箭头 激活 箭头 关闭 箭头 停用

在两个打开的报表之间切换时,第一个报表将发生停用事件,第二个报表将发生激活事件:

停用 (report1) 箭头激活 (report2)

从报表切换到 Access 中的另一对象选项卡时,该报表也会发生停用事件。 但是,在切换到对话框、“弹出方式”属性设置为“”的窗体或其他程序中的窗口时,不会发生停用事件。

打开基于查询的报表时,Access 将在运行基础查询之前触发该报表的打开事件。 因此,可以使用响应打开事件的宏或事件过程来设置报表的条件。 例如,宏或事件过程可以打开用于输入报表条件的自定义对话框。

报表区域事件

打印或预览报表时,报表区域的格式打印事件将在报表的打开激活事件之后、关闭停用事件之前发生:

打开 (报表) 箭头激活 (报表) 箭头格式 (报表部分) 箭头打印 (报表部分) 箭头关闭 (报表) 箭头停用 (报表)

安全性    可以使用报表视图启用 报表的用户筛选。 但与“打印预览”不同,报表视图中不会显示任何部分中 的“格式” 和“ 打印 ”事件。 这也适用于在控件中显示的 VBA 函数结果和用户定义的过程,这些 (这些事件中的标签标题、显示状态、条件格式设置、控件大小调整等) 。 因此,请勿在此事件中使用代码来格式化、隐藏或打印可能会公开的机密数据。 建议通过将 AllowReportView 属性设置为“否”来预先筛选数据或禁用报表预览。

此外,将在设置格式的过程中或设置格式之后、打印事件之前发生以下事件:

  • 如果 Access 在设置报表格式的过程中返回之前的区域,则将发生撤消时事件。

  • 如果报表未显示任何记录,则将发生无数据事件。

  • 打印页前事件在设置格式之后、打印之前发生。 此事件可用于自定义打印报表的外观。

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。