Access 2003完整教程:数据库对象的事件发生顺序

单个操作,例如从一个控件移到另一个控件,可以触发几种不同的事件,这些事件以特定的顺序依次发生。了解这些事件发生的时间和发生的先后顺序是非常重要的,因为这会影响到宏或事件过程运行的时间和方式。例如,如果有两个事件过程,它们是按照某个先后顺序运行的,则必须确保与其关联的事件发生顺序与这两个过程的运行顺序一致。

窗体上控件的事件发生顺序

在将焦点移到某个控件以及对控件中的数据进行更改或更新时,窗体上的控件就会发生相应的事件。

将焦点移到某个控件

在将焦点移到窗体上的某个控件时,例如,打开包含一个或多个活动控件的窗体或者在同一个窗体中将焦点从一个控件移到另一个控件时,就会以下列顺序发生EnterGotFocus事件:

EnterGotFocus

如果正在打开窗体,则与打开窗体相关的事件(如OpenActivateCurrent)将先于这些事件发生,如下所示:

Open(窗体) →Activate(窗体) →Current(窗体) →Enter(控件) →GotFocus(控件)

当焦点从窗体中的某个控件移走时(例如,关闭包含有一个或多个活动控件的窗体,或者在同一个窗体中将焦点从一个控件移动到另一个控件),则Exit事件和LostFocus事件将按照下列顺序发生:

ExitLostFocus

如果正在关闭窗体,则Exit事件和LostFocus事件先发生,然后才发生与关闭窗体相关联的事件(例如,UnloadDeactivateClose),如下所示:

Exit(控件) →LostFocus(控件) →Unload(窗体) →Deactivate(窗体) →Close(窗体)

更改或更新控件中的数据

为窗体中的控件输入或更改数据,然后将焦点移到另一个控件时,将发生BeforeUpdate事件和AfterUpdate事件:

BeforeUpdateAfterUpdate

如果控件的数据发生更改,则在控件BeforeUpdate事件和AfterUpdate事件发生以后将发生Exit事件和LostFocus,如下所示:

BeforeUpdateAfterUpdateExitLostFocus

对文本框中的文本或组合框中文本框部分的文本进行更改时,将发生Change事件。只要控件的内容发生改变,就会发生Change事件,但是该事件发生的时间先于移动到另一个控件或移动到另一个记录(也即先于BeforeUpdate事件和AfterUpdate事件而发生)。当用户在文本框中或者组合框的文本框中进行输入或修改时,每次击键所引起的事件的发生顺序如下:

KeyDownKeyPressDirtyChangeKeyUp

如果在组合框中输入值时组合框不在组合框列表中,并且要将焦点移到另一控件或记录,则发生NotInList事件。该事件在键盘事件和组合框的Change事件之后发生,但先于任何其他控件事件和窗体事件。如果组合框的“限于列表”属性设为“是”,则窗体的Error事件会在NotInList事件发生以后立即发生:

KeyDownKeyPressDirtyChangeKeyUpNotInListError

窗体上记录事件的发生顺序

当将焦点移动到窗体上的某个记录,对记录的数据进行更新、删除已有的单个记录或多个记录,或者新建记录时,将发生与窗体上记录相关的事件。

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

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

Current(窗体) →BeforeUpdate(窗体) →AfterUpdate(窗体) →Current(窗体)

在离开数据已经更改的记录但还没进入另一个记录之前,当前焦点所在的控件将发生Exit事件和LostFocus事件。这些事件在窗体的BeforeUpdate事件和AfterUpdate事件发生之后发生,如下所示:

BeforeUpdate(窗体) →AfterUpdate(窗体) →Exit(控件) →LostFocus(控件) →RecordExit(窗体) →Current(窗体)

在窗体中的控件之间移动焦点时,每个控件都将发生相应的事件。例如,在执行下列操作时将发生如下事件序列:

删除记录

在删除记录时,窗体将发生下列事件,并且 Microsoft Access 将显示对话框要求您确认删除操作:

DeleteBeforeDelConfirmAfterDelConfirm

如果用户取消了Delete事件,则BeforeDelConfirm事件和AfterDelConfirm事件将不会发生,而且也不显示对话框。

创建新记录

如果将焦点移动到窗体中的一个新记录(空记录),然后在控件中键入新记录时,相应的事件将按照下列顺序发生:

Current(窗体) →Enter(控件) →GotFocus(控件) →BeforeInsert(窗体) →AfterInsert(窗体)

窗体中控件的BeforeUpdate事件和AfterUpdate事件,新记录的BeforeUpdate事件和AfterUpdate事件将在BeforeInsert事件发生之后但在AfterInsert事件之前发生。

窗体和子窗体的事件发生顺序

打开或关闭窗体,在窗体之间移动,或者对窗体中数据进行处理时,将发生与窗体相关的事件。

打开或关闭窗体

在打开窗体时,将按照下列顺序发生相应的事件:

OpenLoadResizeActivateCurrent

如果窗体中没有活动的控件,在窗体的Activate事件发生之后仍会发生窗体的GotFocus事件,但是该事件将在Current事件之前发生。

在关闭窗体时,将按照下列顺序发生相应的事件:

UnloadDeactivateClose

如果窗体中没有活动的控件,在窗体的Unload事件发生之后仍会发生窗体的LostFocus事件,但是该事件将在Deactivate事件之前发生。

在窗体之间移动

在两个打开的窗体之间切换时,第一个窗体将发生Deactivate事件,第二个窗体将发生Activate事件:

Deactivate(窗体 1) →Activate(窗体 2)

在从窗体切换到 Microsoft Access 中的另一个窗口时,窗体的Deactivate事件同样会发生。但是,如果是切换到对话框,或者切换到“弹出方式”属性设为“是”的窗体,或者切换到另一个应用程序中的窗口时,则不会发生Deactivate事件。

注释如果移动到已经打开的窗体,即使是使用 OpenForm 操作,也不会发生Open事件。

处理窗体中的数据

在窗体中的记录间移动并对数据进行更改时,将发生窗体事件和控件事件。例如,第一次打开一个窗体时,将按照下列顺序发生相应的事件:

Open(窗体) →Load(窗体) →Resize(窗体) →Activate(窗体) →Current(窗体) →Enter(控件) →GotFocus(控件)

类似地,在关闭窗体时,也将按照下列顺序发生相应的事件:

Exit(控件) →LostFocus(控件) →Unload(窗体) →Deactivate(窗体) →Close(窗体)

如果已经对控件中的数据进行更改,控件和窗体的BeforeUpdate事件和AfterUpdate事件都将在Exit事件发生之前发生。

使用子窗体

如果打开的窗体中包含有子窗体,则在加载主窗体之前先加载子窗体及其控件。因而,子窗体及其控件的事件(例如,Open事件、Current事件、Enter事件和GotFocus事件)将在主窗体的事件发生之前先发生。但子窗体不会发生Activate事件,因此在打开主窗体时仅触发主窗体的Activate事件。

类似地,当关闭包含子窗体的窗体时,在窗体卸载之后子窗体及其包含的控件也会卸载。子窗体不会发生Deactivate事件,因此在关闭主窗体时仅触发主窗体的Deactivate事件。对应于控件、窗体和子窗体的事件将按照下列顺序发生。

  1. 对应于子窗体控件的事件(例如ExitLostFocus
  2. 对应于窗体控件的事件(包括子窗体控件)
  3. 对应于窗体的事件(例如DeactivateClose
  4. 对应于子窗体的事件

注释因为子窗体的事件是在主窗体关闭后发生的,所以某些事件(例如,从子窗体的某个事件中取消主窗体的关闭)将不会发生。您可能需要将这些类型的验证移动到主窗体的事件中。

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

窗体或控件获得焦点时,则在按键或发送击键信息时发生键盘事件。鼠标指针在窗体、节或控件上时按了鼠标键,或者将鼠标指针在窗体、节或者窗体中的控件上移动时,将发生窗体、窗体的节和窗体中的控件的鼠标事件。

键盘事件

在窗体中的控件获得焦点时按下和放开键(或者使用 SendKeys 操作或语句发送击键信息),将按照下列顺序发生相应的事件:

KeyDownKeyPressKeyUp

在按下和放开键或者发送ANSI 字符集键中的击键信息时,KeyDownKeyPressKeyUp事件都将发生。如果按住 ANSI 键不放,KeyDownKeyPress事件将重复交替发生(KeyDownKeyPressKeyDownKeyPress,依此类推)直到按键被释放,然后KeyUp事件发生。

如果按下并放开某个非 ANSI 键,将发生KeyDown事件和KeyUp事件。如果按下某个非 ANSI 键一直不放,则KeyDown事件将重复发生,直到放开该键为止;然后在放开该键之后发生KeyUp事件。

如果按下某个键触发了某个控件的另一个事件,则所触发的事件在KeyPress事件之后,但在KeyUp事件之前发生。例如,如果某个击键更改了文本框中的内容,即触发了文本框的Change事件,则将按照下列顺序发生相应的事件:

KeyDownKeyPressChangeKeyUp

如果某个击键使得焦点从一个控件移动到另一个控件,则第一个控件将发生KeyDown事件,而第二个控件将发生KeyPress事件和KeyUp事件。例如,如果对控件中的数据进行更改,然后按 Tab 键移动到另一个控件,则将按照下列顺序发生相应的事件:

鼠标事件

当鼠标指针在窗体中某个控件上时,按下按键和松开鼠标键,控件的相应事件将按照下列顺序发生:

MouseDownMouseUpClick

如果某个控件获得了焦点,这时单击另一个控件将使焦点转移到另一个控件,则将按照下列顺序发生相应的事件:

如果移动到另一个记录并且单击某个控件,则在控件的Enter事件发生之前,先发生窗体的Current事件。

双击某个控件将触发控件的DblClick事件和Click事件发生。例如,在双击非命令按钮的其他控件时,该控件将按照下列顺序发生相应的事件:

MouseDownMouseUpClickDblClickMouseUp

双击一个命令按钮时,不仅发生上述事件,而且之后还将发生第二次Click事件。

将鼠标指针移过窗体、节或控件时,将发生窗体、节或者控件的MouseMove事件。该事件独立于其他鼠标事件。

报表事件和报表节事件的发生顺序

打开报表进行打印或进行打印预览或者关闭报表时,将发生报表和报表节的相应事件。

报表事件

打开报表进行打印或进行打印预览,然后关闭报表或切换到 Microsoft Access 中另一个窗口时,将按照下列顺序发生相应的事件:

OpenActivateCloseDeactivate

在两个打开的报表之间进行切换时,第一个报表将发生Deactivate事件,而第二个报表将发生Activate事件:

Deactivate(报表 1) →Activate(报表 2)

从一个报表切换到 Microsoft Access 中的另一个窗口时,同样会发生报表的Deactivate事件。但是,如果是切换到对话框,或者切换到“弹出方式”属性设为“是”的窗体,或者切换到另一个应用程序中的窗口时,则不会发生Deactivate事件。

打开一个基于查询的报表时,Microsoft Access 将在运行基础查询之前先触发Open事件。因此,利用这个特性,可以使用响应Open事件的宏或事件过程对报表的条件进行设置。例如,使用宏或事件过程可以打开一个自定义对话框,并在其中输入该报表的条件。

报表节事件

打印报表或对报表进行预览时,在报表的Open事件和Activate事件发生之后将发生FormatPrint事件,但这些事件在Close事件或Deactivate事件之前发生:

Open(报表) →Activate(报表) →Format(报表节) →Print(报表节) →Close(报表) →Deactivate(报表)

另外,在格式化过程中或完成格式化之后将发生下列事件,但是这些事件都在Print事件发生之前发生:

上页:Access 2003完整教程:关于与 Access 一起工作的应用程序 下页:Access 2003完整教程:使用宏还是使用 Visual Basic?

Access 2003完整教程:数据库对象的事件发生顺序

Access 2003完整教程:使用宏还是使用 Visual Basic?Access 2003完整教程:在查询和筛选中表达式的输入位置 (MDB)
Access 2003完整教程:在“数据表”或“窗体”视图中编辑字段数据疑难解答Access 2003完整教程:关于使用通配符
Access 2003完整教程:关于在查询中处理空字段 (MDB)Access 2003完整教程:关于使用 Visual Basic 代码处理数据和数据库对象
Access 2003完整教程:关于对记录进行排序 (MDB)Access 2003完整教程:打开报表快照
Access 2003完整教程:添加图片或对象Access 2003完整教程:显示或隐藏节
Access 2003完整教程:调整图片大小Access 2003完整教程:总计查询中的记录 (MDB)
Access 2003完整教程:在查询中更改字段名 (MDB)Access 2003完整教程:创建、自定义和删除切换面板窗体 (MDB)
Access 2003完整教程:重命名表或数据表中的字段 (MDB)Access 2003完整教程:在控件上应用或更改条件格式
Access 2003完整教程:转换 Access 文件Access 2003完整教程:复制或移动数据
Access 2003完整教程:创建 Access 项目Access 2003完整教程:在窗体或报表中添加图表
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号