全部显示

LostFocus 事件

       

LostFocus 事件在窗体或控件失去焦点时发生。

说明

若要在该事件发生时运行事件过程,请将 OnLostFocus 属性设置为宏的名称或 [事件过程]。

当焦点为响应用户操作而移动时,该事件发生。例如,当按下 Tab 键、单击对象,或在 Visual Basic 中使用 SetFocus 方法,在宏中使用 SelectObjectGoToRecordGoToControlGoToPage 操作时,该事件就会发生。

控件只有在其 VisibleEnabled 属性都设为“是”时才能获得焦点。窗体只有在它没有控件或所有可见控件都已禁用时才能获得焦点。只要窗体中包含可见的有效控件,窗体的 GotFocus 事件就不会发生。

注意   若要自定义按下 Tab 键时焦点在窗体上控件间的移动顺序,请设置控件的 Tab 次序或指定控件的访问键

LostFocus 与 Exit 事件不同之处在于:每当控件失去焦点时就会发生 LostFocus 事件。而 Exit 事件只有在同一窗体上的一个控件失去焦点之后、另一控件获得焦点之前才会发生。LostFocus 事件在 Exit 事件之后发生。

如果将焦点移到窗体上的另一控件上,而且控件在该窗体上没有焦点,则窗体上原来拥有焦点的控件的 Exit 和 LostFocus 事件都将发生在焦点移到的控件的 Enter 和 GotFocus 事件发生之前。

如果使用鼠标将焦点从主窗体上的控件移动到该窗体的子窗体控件上,则将发生下列事件:

Exit(主窗体上的控件)  ==>

LostFocus(主窗体上的控件)  ==>

Enter(子窗体控件)  ==>

Exit(子窗体上具有焦点的控件)  ==>

LostFocus(子窗体上具有焦点的控件)  ==>

Enter(子窗体上焦点将移到的控件)  ==>

GotFocus(子窗体上焦点将移到的控件)

如果子窗体上焦点将移到的控件以前有焦点,则控件的 Enter 事件和 GotFocus 事件均不发生,但是子窗体控件的 Enter 事件将发生。如果将焦点从子窗体上的控件移动到主窗体上的控件,子窗体上该控件的 Exit 事件和 LostFocus 事件不发生,只有子窗体控件的 Exit 事件以及主窗体上控件的 Enter 事件和 GotFocus 事件发生。

注意   一般使用鼠标或按键(例如 Tab)将焦点移到另一控件上。这样的操作不但会触发本主题讨论的事件,还会发生鼠标或键盘事件。

当在两个打开的窗体之间切换时,在第一个窗体上发生 Deactivate 事件,在第二个窗体上发生 Activate 事件。如果该窗体不包含已启用的可见控件,则对于第一个窗体,LostFocus 事件先发生,而后发生 Deactivate 事件;对于第二个窗体,Activate 事件先发生,而后 GotFocus 事件发生。

示例

下面的示例可以在焦点移到选项按钮时,在标签中显示消息。

若要试用该示例,请将下列事件过程添加到名为“联络人”的窗体中,并在该窗体中包含一个名为“OptionYes”的选项按钮和名为“LabelYes”的标签。

Private Sub OptionYes_GotFocus()
    Me!LabelYes.Caption = "Option button 'Yes' has the focus."
End Sub

Private Sub OptionYes_LostFocus()
    Me!LabelYes.Caption = ""        ' Clear caption.
End Sub