3

我目前正在使用 MS Access VBA 进行编程。我有一个带有文本框的表单。我正在文本框的 LostFocus 事件上执行一些代码。

但是,当我使用鼠标关闭表单并单击表单右上角的关闭按钮时,将光标放在文本框中,我注意到 LostFocus 事件在 Form_Unload 事件之前执行。

有没有办法避免这种情况?

另外,我在哪里可以找到事件的优先级?或者 VBA 中的优先级是如何确定的?

编辑:

我的确切应用是这样的。我在 MS Access 中有一个表单,用于接受用户的登录凭据。

在此处输入图像描述

我想禁用密码和登录按钮的文本框,直到输入有效的用户名。我在 onLostFocus 事件中检查用户名是否有效。现在,考虑一个在用户名文本框中没有输入任何内容就关闭此表单的情况。在这种情况下,onLostFocus 事件会在 Form_Unload 事件之前执行。

但是,对于正常操作,我需要 onLostFocus 事件,因为在该事件中我启用了密码文本框和登录按钮。

能不能有别的办法??

4

3 回答 3

3

失去焦点事件通常不是代码的最佳事件。你有使用它的具体原因吗?如果是这样,您将需要在执行中添加条件。

Access 表单的事件顺序为:

退出 → 失焦

如果您正在关闭表单,则 Exit 和 LostFocus 事件发生在与关闭表单相关的事件(例如 Unload、Deactivate 和 Close)之前,如下所示:

Exit(控件)→ LostFocus(控件)→ Unload(表单)→ Deactivate(表单)→ Close(表单)

-- http://office.microsoft.com/en-ie/access-help/order-of-events-for-database-objects-HP005186761.aspx

于 2012-11-02T09:48:58.113 回答
1

"我在 onLostFocus 事件中检查用户名是否有效。 "

在用户名文本框的更新后事件中进行验证...当用户名值更改时,根据需要启用/禁用密码文本框。

您最初可以在表单加载时禁用密码文本框,假设表单加载时用户名文本框为空。

于 2012-11-03T05:40:21.743 回答
0

如果您正在向其中插入数据的控件,则使用 onDirty 或 onChange 可能更适合您正在做的事情。有很多比 onLostFocus 更好的选择。如果不了解任何具体内容,就很难知道如何更具体地帮助您。我会说只是在 Event 上尝试另一个,因为由于 onLostFocus 的性质,不可能为这种意外情况做好准备。

于 2012-11-02T12:26:41.877 回答