很多网友对于Access的Open打开事件与Load加载事件,以及Close关闭事件及Unload卸载事件的区别一直比较迷糊
有不少网友多次问过我,这里就做个贴子说明一下:
1.Open事件发生在前,Load事件发生在后,前后不一样
2.在Open里支持取消打开的Cancel属性,而Load里没有,这个事件很有用
3.窗体Open时,窗体还没有显示出来,相关的控件都还没有加载,而Load时,窗体显示出来了,对相关的控件可用代码来设置
4.有些属性必须在LOAD里更改 ,即窗体加载时才会出现的
5. 事件发生的顺序是:打开→加载→ 调整 →激活→当前
官方的解释
1.在打开窗体,但第一条记录尚未显示时,发生此事件的Open事件。
参数Cancel的设置 该设置确定是否打开窗体或报表。将 Cancel 参数设置为 True (–1) 可以取消窗体或报表打开。
通过窗体的Open事件发生时运行宏或事件过程,您可以关闭另一个窗口或将焦点移到窗体上的特定控件。您还可以运行一个宏或在窗体之前需要要求提供信息的事件过程或打开或打印报表。
例如,打开的宏或事件过程可以打开自定义对话框中的用户输入的条件来筛选窗体或报表中包含的日期范围上显示的记录集。 当激活已打开的窗体时, Open事件不会发生 — 例如,您从 Microsoft Access 中的另一个窗口切换到窗体或在宏中使用 OpenForm 操作将打开的窗体置于顶部。但是,在这些情况下会激活事件。 当打开一个基于基础查询的窗体时,Microsoft Access 先运行该窗体的基础查询,然后才运行 Open 宏或事件过程。 如果您的应用程序可以有多个窗体一次加载,使用,而不是 Open 事件Activate和Deactivate事件来显示和隐藏自定义工具栏时将焦点移到不同的窗体。 Open 事件发生在Load事件之前,在打开窗体并显示其记录时触发。 首次打开窗体时,下列事件将按如下顺序发生: 打开→负载→ 调整 →激活→当前 Close 事件发生在Unload事件之后,后者在窗体被关闭但尚未从屏幕上删除之前被触发。 当关闭窗体时,下列事件将按如下顺序发生: 卸载→停用→关闭 当 Close 事件发生时,可以打开另一个窗口或要求输入用户名来产生日志项,以表明使用该窗体或报表的用户。 如果您正在尝试决定是否要打开或加载事件用于您的宏或事件过程,一个显著差别可取消的Open事件,但不能Load事件。例如,如果您正在动态构建窗体的Open事件的事件过程中的窗体的记录源,您可以取消打开窗体,如果要显示的记录。同样,可取消Unload事件,但Close事件不能。
下面的示例用于显示在用户单击"否"按钮时,如何取消窗体的打开操作。消息框提示用户输入订单的详细信息。如果用户单击"否",则"订单明细"窗体将不打开。 要试用该示例,请将以下事件过程添加到窗体中。
[size=1em][url=]VBA[/url]
Private Sub Form_Open(Cancel As Integer) Dim intReturn As Integer intReturn = MsgBox("Enter order details now?", vbYesNo) Select Case intReturn Case vbYes ' Open Order Details form. DoCmd.OpenForm "Order Details" Case vbNo MsgBox "Remember to enter order details by 5 P.M." Cancel = True ' Cancel Open event. End Select End Sub
2.Load事件 :在打开窗体并显示其记录时发生。
若要这些事件发生时运行宏或事件过程,请将OnLoad属性设置为宏的名称或 [事件过程]。
诸如以下的用户操作将引起Load事件: 启动应用程序。 通过在"数据库"窗口中单击"打开"来打开窗体。 在宏中运行 OpenForm 操作。
通过在窗体的Load事件发生时运行宏或事件过程,可以指定控件的默认设置,或显示计算取决于该窗体的记录中的数据的数据。 通过窗体Unload事件发生时运行宏或事件过程,您可以验证应卸载窗体,或指定窗体卸载时应该发生的操作。您还可以打开另一个窗体或显示一个对话框要求输入用户名来产生日志项,以表明使用该窗体。 首次打开窗体时,下列事件将按如下顺序发生: Open → Load → Resize → Activate → Current 如果您正在尝试决定是否要打开或加载事件用于您的宏或事件过程,一个显著差别可取消的Open事件,但不能Load事件。例如,如果您正在动态构建窗体的Open事件的事件过程中的窗体的记录源,您可以取消打开窗体,如果要显示的记录。 当关闭窗体时,下列事件将按如下顺序发生: Unload → Deactivate → Close Unload事件发生的Close事件之前。可取消Unload事件,但Close事件不能。 注释 | 创建宏或事件过程的Load事件,如激活和GotFocus,与相关的事件时请确保它们不会发生冲突 (例如,请确保不会导致发生一个宏或取消在另一种过程) 和它们不会导致级联事件。 |
下面的示例可以在加载窗体时在窗体的标题中显示当前日期。 若要尝试运行该示例,请将以下事件过程添加到窗体中: [size=1em][url=]VBA[/url]
Private Sub Form_Load() Me.Caption = Date End Sub
帮助中有详尽说明,你还可以用代码测试先后的,例如在各事件中写一个弹出提示Msgbox()
相关链接vba中unload事件与close事件的区别:
http://www.access-cn.com/info/info1876.html
|