Exit 事件

此頁沒有內(nèi)容條目
內(nèi)容

expandtri全部顯示

Exit 事件正好在焦點從一個控件轉(zhuǎn)移到同一窗體上另一個控件之前發(fā)生。

Private Sub object_Exit()

Object    窗體上控件的名稱。

說明

該事件僅適用于窗體上的控件,不適用于報表上的控件。該事件不適用于選項組中的復選框選項按鈕切換按鈕,僅適用于選項組本身。

若要在該事件發(fā)生時運行事件過程,請將 OnExit 屬性設置為宏的名稱或 [事件過程]。

因為 Enter 事件發(fā)生在焦點移動到一個指定控件之前,所以可以使用 Enter 宏或事件過程來顯示指示。例如,可以使用宏或事件過程來顯示一個較小的窗體或消息框,以指出控件通常包含的數(shù)據(jù)類型,或給出如何使用控件的幫助。

Exit 事件發(fā)生在 LostFocus 事件之前。

與 LostFocus 事件不同,Exit 事件在窗體失去焦點時并不發(fā)生。例如,如果在窗體上選中復選框,然后單擊報表。在選中復選框時,Enter 和 GotFocus 事件將發(fā)生;而在單擊報表時,只有 LostFocus 事件發(fā)生,Exit 事件并沒發(fā)生(因為焦點正移動到不同的窗口)。如果再次選中窗體上的復選框,以將復選框成為前臺對象,GotFocus 事件發(fā)生,但是 Enter 事件并不發(fā)生(因為在窗體第一次激活時,控件已獲得焦點)。Exit 事件只有在單擊窗體上的另一個控件時才發(fā)生。

如果將焦點移動到窗體上的另一控件上,而且該控件在窗體上沒有焦點,則窗體原來擁有焦點的控件的 Exit 和 LostFocus 事件將發(fā)生在焦點移到的控件的 Enter 和 GotFocus 事件發(fā)生之前。

如果使用鼠標將焦點從主窗體上的控件移動到該窗體的子窗體中的控件(子窗體上沒有獲得焦點的控件),則將發(fā)生下列事件:

Exit (主窗體上的控件)

?

LostFocus (主窗體上的控件)

?

Enter (子窗體上的控件)

?

LostFocus(子窗體上焦點將移到的控件)

?

GotFocus(子窗體上焦點將移到的控件)

?

Enter (子窗體上焦點將移到的控件)

?

GotFocus (子窗體上焦點將移到的控件)

如果子窗體上焦點將移到的控件以前有焦點,則控件的 Enter 事件和 GotFocus 事件均不發(fā)生,但是子窗體控件的 Enter 事件將發(fā)生。如果將焦點從子窗體上的控件移動到主窗體上的控件,子窗體上這個控件的 Exit 事件和 LostFocus 事件不發(fā)生,只有子窗體控件的 Exit 事件以及主窗體上控件的 Enter 事件和 GotFocus 事件發(fā)生。

注釋  一般使用鼠標或按鍵(例如 Tab )將焦點移到另一控件上。這不但會使本主題討論的事件發(fā)生,還將發(fā)生鼠標或鍵盤事件。

當發(fā)生 Enter 或 Exit 事件時,可以運行一個宏,該宏通過使用 GoToControl 操作根據(jù)控件中的數(shù)據(jù)來更改 Tab 順序。例如,如果用戶在“婚姻狀態(tài)”字段中使用“單身”,則可以確保焦點不會移至“配偶姓名”字段。

可以在 Exit 宏中使用 CancelEvent 操作來取消退出控件。不能在 Enter 宏中使用 CancelEvent 操作取消 Enter 事件。但是,可以在 Enter 宏中使用 GoToControl 操作將焦點移至其他控件。

示例

在下面的示例中,“LastName”文本框中包含兩個事件過程。Enter 事件過程顯示一條消息,告訴用戶在文本框中能輸入何種類型的數(shù)據(jù);Exit 事件過程則顯示一個對話框,詢問用戶是否應該在焦點移動到另一控件之前保存更改。如果用戶單擊“取消”按鈕,Cancel 參數(shù)將設置為 True,這會將焦點移到文本框而不保存更改。如果用戶選擇“確定”按鈕,則會保存更改,然后焦點會移動到另一控件上。

若要試用該示例,請將下列事件過程添加到包含名為“姓氏”文本框的窗體上。

Private Sub LastName_Enter()

    MsgBox "Enter your last name."

End Sub

Private Sub LastName_Exit(Cancel As Integer)

    Dim strMsg As String

    strMsg = "You entered '" & Me!LastName _

     & "' as your last name." & _

        vbCrLf & "Is this correct?"

    If MsgBox(strMsg, vbYesNo) = vbNo Then

        Cancel = True            ' Cancel exit.

    Else

        Exit Sub                    ' Save changes and exit.

    End If

End Sub