文章編號: 300688 - 上次校閱: 2006年9月6日 - 版次: 6.3

如何停用應用程式視窗上的關閉按鈕,以及檔案功能表上的結束命令

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
進階使用者:必須具備專家層級的程式碼撰寫、交互操作和多使用者技能。

本文適用於 Microsoft Access 資料庫 (.mdb) 和 Microsoft Access 專案 (.adp)。

如需本文對應到 Microsoft Access 2000 版本的相關內容,請參閱編號為 245746? (http://support.microsoft.com/kb/245746/ ) 的知識庫文件。
如需本文對應到 Microsoft Access 97 版本的相關內容,請參閱編號為 258049? (http://support.microsoft.com/kb/258049/ ) 的知識庫文件。

在此頁中

全部展開 | 全部摺疊

結論

Microsoft Access 沒有內建的方法能停用應用程式視窗的 [關閉] 按鈕 (X)、[系統] 功能表上的 [關閉] 命令,或是 [檔案] 功能表上的 [結束] 命令。本文將告訴您,如何以程式設計方式停用這些命令。

其他相關資訊

警告:如果您遵循本範例中的步驟執行,便會修改範例資料庫 Northwind.mdb,因此最好備份此 Northwind.mdb 檔案,然後再使用此資料庫的複本遵循這些步驟執行。

如果要停用應用程式的 [關閉] 按鈕,以及 [系統] 功能表上的 [關閉] 命令,必須從 Win32 API 呼叫 [GetSystemMenu][EnableMenuItem] 函數。

為了要停用 [檔案] 功能表上的 [結束] 命令,您必須使用 CommandBars 集合,它會向 Visual Basic for Applications 公開應用程式中的所有功能表列、工具列和快顯功能表,讓您能夠以程式設計方式加以操控。

Microsoft 僅提供示範性的程式設計範例,不做任何明示或默示的保證。其中包括 (但不限於) 其適售性與適合某特定用途之默示擔保。本文將假設您對於示範所用的程式設計語言,以及用於建立和偵錯程序的工具相當熟悉。Microsoft 技術支援工程師可以協助說明特定程序的功能,但不會修改這些範例以提供附加功能或建構程序來滿足您的特定需求。

逐步範例

  1. 啟動 Microsoft Access。
  2. 開啟範例資料庫 Northwind.mdb。
  3. [插入] 功能表上按一下 [模組],建立新的標準模組。
  4. 在 Declarations 區段中輸入下列程式碼:
    Option Compare Database
    Option Explicit
    
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
        ByVal bRevert As Long) As Long
    
    Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As _
        Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
    
    Const MF_GRAYED = &H1&
    Const MF_BYCOMMAND = &H0&
    Const SC_CLOSE = &HF060&
    
    Public Function SetEnabledState(blnState As Boolean)
        Call CloseButtonState(blnState)
        Call ExitMenuState(blnState)
    End Function
    
    'Disable the Menu Option
    Sub ExitMenuState(blnExitState As Boolean)
        Application.CommandBars("File").Controls("Exit").Enabled = blnExitState
    End Sub
    
    'Disable the Close Button Option
    Sub CloseButtonState(boolClose As Boolean)
        Dim hWnd As Long
        Dim wFlags As Long
        Dim hMenu As Long
        Dim result As Long
           
        hWnd = Application.hWndAccessApp
        hMenu = GetSystemMenu(hWnd, 0)
        If Not boolClose Then
            wFlags = MF_BYCOMMAND Or MF_GRAYED
        Else
            wFlags = MF_BYCOMMAND And Not MF_GRAYED
        End If
        
        result = EnableMenuItem(hMenu, SC_CLOSE, wFlags)
    End Sub
    					
  5. [檔案] 功能表上按一下 [儲存 Northwind],然後按一下 [確定],使用 [模組名稱] 方塊中出現的預設值。
  6. 以下列特性建立新的表單:
    表單:frmSetCloseState
       -------------------------
    標題:設定關閉狀態
    
    命令按鈕
       ------------------------
    名稱:cmdEnable
    標題:啟用
    OnClick:事件程序
    
    命令按鈕
       ------------------------
    名稱:cmdDisable
    標題:停用
    OnClick:事件程序
    					
  7. 在 [設計] 檢視中,用滑鼠右鍵按一下 [啟用] 命令按鈕,然後在出現的功能表上按一下 [建立事件]
  8. 按一下 [程式碼建立幫手],再按一下 [確定],然後在所建立的模組中輸入下列程式碼:
    Private Sub cmdEnable_Click()
        Call SetEnabledState(True)
    End Sub
    					
  9. 加入下列 [停用] 命令按鈕的程式碼:
    Private Sub cmdDisable_Click()
        Call SetEnabledState(False)
    End Sub
    					
  10. 儲存表單,然後在 [表單檢視] 中開啟。
請注意,如果您按一下 [停用] 命令按鈕,便會停用應用程式視窗上的 [關閉] 按鈕、[關閉] 命令,以及 [檔案] 功能表上的 [結束] 命令;如果按一下 [啟用] 命令按鈕,便可重新啟用這些命令。

用法:

本文所說明的程式碼,可以讓您輕鬆啟用或停用應用程式視窗的 [關閉] 按鈕、[關閉] 命令,以及 [檔案] 功能表上的 [結束] 命令,以防使用者使用這些方法結束應用程式。

請注意,這項技巧會影響 Microsoft Access 應用程式視窗上的 [關閉] 按鈕,但不會影響 [資料庫] 視窗上的 [關閉] 按鈕。停用這些選項以後,當您的資料庫關閉時,這兩個選項都不會自動重新啟用。如果使用者關閉資料庫,而讓 Microsoft Access 保持開啟,則該使用者將無法使用 [關閉] 按鈕或 [檔案] 功能表上的 [結束] 命令來結束 Microsoft Access。在此情況下,您應該在終止應用程式之前,重新啟用這兩個選項。否則,使用者必須結束並重新啟動 Microsoft Access,才能啟用 [關閉] 按鈕和 [檔案] 功能表上的 [結束] 命令。

這篇文章中的資訊適用於:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
關鍵字:?
kbvba kbprogramming kbhowto KB300688
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。