我目前正在MS Access VBA中编程。我有一个带有文本框的表单。我正在文本框的LostFocus事件上执行一些代码。
但是,当我使用鼠标关闭表单并单击表单右上角的关闭按钮时,光标位于文本框中,我注意到在Form_Unload事件之前LostFocus事件正在执行。
有没有办法避免这种情况?
另外,我在哪里可以找到事件的优先级?或者如何在VBA中确定优先级?
修改
我的确切应用是这样的。 我在MS Access中有一个表单,用于接受用户的登录凭据。
我想在密码和登录按钮的文本框中取消,直到输入有效的用户名。我在onLostFocus事件中检查用户名是否有效。现在,考虑一个关闭此表单而不在用户名文本框中输入任何内容的情况。在这种情况下,onLostFocus事件在Form_Unload事件之前执行。
但是,对于正常操作,我需要onLostFocus事件,因为在该事件上我启用了密码文本框和登录按钮。
有没有不同的方法呢?
答案 0 :(得分:3)
丢失焦点事件通常不是代码的最佳事件。你有特殊的理由使用它吗?如果是这样,您将需要为执行添加条件。
Access表单的事件顺序为:
退出→LostFocus
如果要关闭表单,则会在之前发生Exit和LostFocus事件 关闭表单相关的事件(例如卸载, 取消激活和关闭),如下所示:
退出(控制)→LostFocus(控制)→卸载(窗体)→取消激活 (表格)→关闭(表格)
- http://office.microsoft.com/en-ie/access-help/order-of-events-for-database-objects-HP005186761.aspx
答案 1 :(得分:1)
“我在onLostFocus事件中检查用户名是否有效。”
在用户名文本框的更新后事件中进行验证...在用户名值更改时,根据需要启用/禁用密码文本框。
您最初可以在表单加载时禁用密码文本框,假设表单加载了用户名文本框为空。
答案 2 :(得分:0)
使用onDirty或onChange可能更适合你正在做的事情,如果它是你正在插入数据的控件。有一些比onLostFocus更好的选择。在不知道具体内容的情况下,很难知道如何更具体地帮助您。我会说在Event上尝试另一个,因为由于onLostFocus的性质,它不可能为这种偶然事件做好准备。