共用方式為


擴充 Visual Basic 應用程式模型

您可以覆寫 WindowsFormsApplicationBase 類別的 Overridable 成員,將功能新增至應用程式模型。 這項技術可讓您自訂應用程式模型的行為,並在應用程式啟動和關閉時,將呼叫新增至您自己的方法。

應用程式模型的視覺效果概觀

本節會以視覺化方式呈現 Visual Basic 應用程式模型中的函式呼叫順序。 下一節會詳細說明每個函式的用途。

下圖顯示一般 Visual Basic Windows Forms 應用程式中的應用程式模型呼叫順序。 此序列會在 Sub Main 程序呼叫 Run 方法時啟動。

Diagram showing the Application Model call sequence.

Visual Basic 應用程式模型也會提供 StartupNextInstanceUnhandledException 事件。 下圖顯示引發這些事件的機制。

Diagram showing the OnStartupNextInstance method raising the StartupNextInstance event.

Diagram showing the OnUnhandledException method raising the UnhandledException event.

覆寫基底方法

Run 方法會定義 Application 方法執行的順序。 根據預設,Windows Forms 應用程式的 Sub Main 程序會呼叫 Run 方法。

如果應用程式是一般應用程式 (多個執行個體應用程式) 或單一執行個體應用程式的第一個執行個體,則 Run 方法會依下列循序執行 Overridable 方法:

  1. OnInitialize. 根據預設,如果應用程式使用 Windows 驗證,這個方法會設定主要應用程式執行緒的視覺化樣式、文字顯示樣式和目前主體,如果 /nosplash-nosplash 兩者都未做為命令列引數使用,則呼叫 ShowSplashScreen

    如果此函式傳回 False,應用程式啟動順序就會取消。 如果有應用程式不應該執行的情況,這會很有用。

    OnInitialize 方法會呼叫下列方法:

    1. ShowSplashScreen. 可判斷應用程式是否具有已定義啟動顯示畫面,且若具有定義啟動顯示畫面,請在個別執行緒上顯示啟動顯示畫面。

      ShowSplashScreen 方法包含的程式碼,至少會顯示 MinimumSplashScreenDisplayTime 屬性所指定的毫秒數的啟動顯示畫面。 若要使用這項功能,您必須使用專案設計工具 (將 My.Application.MinimumSplashScreenDisplayTime 屬性設定為兩秒),或在覆寫 OnInitializeOnCreateSplashScreen 方法的方法中設定 My.Application.MinimumSplashScreenDisplayTime 屬性,將啟動顯示畫面新增至您的應用程式。 如需詳細資訊,請參閱MinimumSplashScreenDisplayTime

    2. OnCreateSplashScreen. 可允許設計工具發出程式碼,以初始化啟動顯示畫面。

      根據預設,此方法不會執行任何動作。 如果您在 Visual Basic 專案設計工具中為應用程式選取啟動顯示畫面,設計工具會使用方法覆寫 OnCreateSplashScreen 方法,該覆寫方法會將 SplashScreen 屬性設定為啟動顯示畫面表單的新執行個體。

  2. OnStartup. 可提供引發 Startup 事件的擴充點。 如果此函式傳回 False,則應用程式啟動順序就會停止。

    根據預設,這個方法會引發 Startup 事件。 如果事件處理常式將事件引數的 Cancel 屬性設定為 True,則方法會傳回 False 以取消應用程式啟動。

  3. OnRun. 提供當主要應用程式準備好在初始化完成後開始執行時的起點。

    根據預設,在進入 Windows Forms 訊息迴圈之前,此方法會呼叫 OnCreateMainForm (來建立應用程式的主要表單) 和 HideSplashScreen (關閉啟動顯示畫面) 方法:

    1. OnCreateMainForm. 可提供一種方式,讓設計工具發出初始化主表單的程式碼。

      根據預設,此方法不會執行任何動作。 不過,當您在 Visual Basic 專案設計工具中為應用程式選取主要表單時,設計工具會使用方法覆寫 OnCreateMainForm 方法,該覆寫方法會將 MainForm 屬性設定為主要表單的新執行個體。

    2. HideSplashScreen. 如果應用程式已定義啟動顯示畫面且已開啟,則此方法會關閉啟動顯示畫面。

      根據預設,此方法會關閉啟動顯示畫面。

  4. OnStartupNextInstance. 當其它應用程式執行個體啟動時,提供一種方式來自訂單一執行個體應用程式的行為。

    根據預設,這個方法會引發 StartupNextInstance 事件。

  5. OnShutdown. 可提供引發 Shutdown 事件的擴充點。 如果在主要應用程式中發生未處理的例外狀況,此方法就不會執行。

    根據預設,這個方法會引發 Shutdown 事件。

  6. OnUnhandledException. 如果在上述任何列出的方法中發生未處理的例外狀況,則會執行此方法。

    根據預設,只要偵錯工具未附加且應用程式正在處理 UnhandledException 事件,這個方法就會 UnhandledException 引發事件。

如果應用程式是單一執行個體應用程式,且應用程式已在執行中,則應用程式的後續執行個體會在應用程式的原始執行個體上呼叫 OnStartupNextInstance 方法,然後結束。

OnStartupNextInstance(StartupNextInstanceEventArgs) 建構函式會呼叫 UseCompatibleTextRendering 屬性,以判斷要用於應用程式表單的文字轉譯引擎。 根據預設,UseCompatibleTextRendering 屬性會傳回 False,表示使用 GDI 文字轉譯引擎,這是 Visual Basic 2005 和更新版本中的預設值。 您可以覆寫 UseCompatibleTextRendering 屬性以傳回 True,表示使用 GDI+ 文字轉譯引擎,這是 Visual Basic .NET 2002 和 Visual Basic .NET 2003 中的預設值。

設定應用程式

可作為 Visual Basic 應用程式模型的一部分,WindowsFormsApplicationBase 類別會提供設定應用程式的受保護屬性。 這些屬性應該在實作類別的建構函式中設定。

在預設 Windows Forms 專案中,專案設計工具會建立程式碼,以使用設計工具設定來設定屬性。 只有在應用程式啟動時,才會使用屬性;在應用程式啟動後設定它們沒有任何作用。

屬性 決定 在 [專案設計工具] 的 [應用程式] 窗格中設定
IsSingleInstance 應用程式是否以單一執行個體或多個執行個體應用程式的形式執行。 [建立單一執行個體應用程式] 核取方塊
EnableVisualStyles 如果應用程式將使用符合 Windows XP 的視覺化樣式。 [啟用 XP 視覺化樣式] 核取方塊
SaveMySettingsOnExit 如果應用程式在應用程式結束時自動儲存應用程式的使用者設定變更。 [關閉時儲存 My.Settings] 核取方塊
ShutdownStyle 導致應用程式終止的原因,例如啟動表單關閉或最後一個表單關閉的時間點。 [關閉模式] 清單

另請參閱