VisualBasic菜單在應用程序中的使用

字號:

再論窗體
     除窗體設計原理以外,還需考慮應用程序的開始與結(jié)束。有一些技巧用于決定應用程序啟動時的外觀。熟悉應用程序卸載時進行的一些處理也很重要。
     設置啟動窗體
     在缺省情況下,應用程序中的第一個窗體被指定為啟動窗體。應用程序開始運行時,此窗體就被顯示出來(因而最先執(zhí)行的代碼是該窗體的Form_Initialize 事件中的代碼)。如果想在應用程序啟動時顯示別的窗體,那么就得改變啟動窗體。
     要改變啟動窗體,請按照以下步驟執(zhí)行:
     1. 從“工程”菜單中,選取“工程屬性”。
     2. 選取“一般”。
     3. 在“啟動對象”ListBox 中,選取要作為新啟動窗體的窗體。
     4. 選取“確定”。
     沒有啟動窗體時的啟動
     有時候也許要應用程序啟動時不加載任何窗體。例如:可能想先運行裝入數(shù)據(jù)文件的代碼,然后再根據(jù)數(shù)據(jù)文件的內(nèi)容決定顯示幾個不同窗體中的哪一個。要做到這一點,可在標準模塊中創(chuàng)建一個名為 Main 的子過程,如下面的例子所示。
     Sub Main()
      Dim intStatus As Integer
      '調(diào)用一個函數(shù)過程來檢驗用戶狀態(tài)。
      intStatus = GetUserStatus
      '根據(jù)狀態(tài)顯示某個啟動窗體。
      If intStatus = 1 Then
        frmMain.Show
      Else
        frmPassword.Show
     End If
     這個過程必須是一個子過程,且不能在窗體模塊內(nèi)。欲將 Sub Main 過程設為啟動對象,可從“工程”菜單中,選取“工程屬性”,再選“一般”,然后從“啟動對象”框中選定“Sub Main”。
     顯示啟動時的快速顯示
     如果啟動時有一個較長的執(zhí)行過程,例如要從數(shù)據(jù)庫中裝入大量數(shù)據(jù)或者要裝入一些大型位圖,這時可能希望在啟動時給出一個快速顯示??焖亠@示是一種窗體,它通常顯示的是諸如應用程序名,版權信息和一個簡單的位圖等內(nèi)容。啟動 Visual Basic 時所顯示的屏幕就是一個快速顯示。
     要顯示快速顯示,需用 Sub Main 過程作為啟動對象,并用 Show 方法顯示該窗體:
     Private Sub Main()
      '顯示快速顯示。
      frmSplash.Show
      '在此處添加啟動過程。
        ...
      '顯示主窗體并卸載快速顯示。
      frmMain.Show
      Unload frmSplash
     End Sub
     當一些啟動例程正在執(zhí)行時,快速顯示能吸引用戶的注意,造成應用程序裝載很快的錯覺。當這些啟動例程完成以后,可以裝入第一個窗體并使其快速顯示卸載。
     對于快速顯示的設計來說,盡量簡單為好。如果使用大量位圖或者大量控件,則快速顯示本身裝入將會變慢。
     結(jié)束應用程序
     當所有窗體都已關閉并且沒有代碼正在執(zhí)行時,事件驅(qū)動的應用程序就停止運行。如果最后一個可見窗體關閉時仍有隱藏窗體存在,那么,應用程序表現(xiàn)為已經(jīng)結(jié)束了(因為沒有可見的窗體),可實際上應用程序仍在繼續(xù)運行,直至所有隱藏窗體都關閉為止。之所以出現(xiàn)這種情況,是因為對已卸載窗體的屬性或控件的任何訪問,都將導致隱含地、不予顯示地加載那個窗體。
     避免出現(xiàn)關閉應用程序時的這類問題,的辦法是確保所有的窗體都已卸載。如果有一個以上窗體,可以使用 Forms 集合和 Unload 語句。例如,在主窗體上可以用一個名為 cmdQuit 的命令按鈕退出程序。如果應用程序只有一個窗體,則 Click 事件過程可簡單為:
     Private Sub cmdQuit_Click ()
      Unload Me
     End Sub
     如果應用程序使用多窗體,通過把代碼放入主窗體的 Unload 事件過程可以卸載這些窗體??梢允褂?Forms 集合確保找到并關閉所有窗體。下列代碼就是使用窗體集合來卸載所有窗體的:
     Private Sub Form_Unload (Cancel As Integer)
      Dim i as integer
      '在窗體集合中循環(huán)并卸載每個窗體。
      For i = Forms.Count - 1 to 0 Step - 1
        Unload Forms(i)
      Next
     End Sub
     有一些情況需要不顧現(xiàn)存窗體或?qū)ο蟮臓顟B(tài)而結(jié)束應用程序。為此,VisualBasic 提供了 End 語句。
     End 語句使應用程序立即結(jié)束:在End語句之后的代碼不會執(zhí)行,也不會再有事件發(fā)生。特別是,Visual Basic將不執(zhí)行任何窗體的QueryUnload、Unload或 Terminate事件過程。對象的各個引用將被釋放,但如果定義有自己的類,Visual Basic 將不執(zhí)行由這些類所創(chuàng)建對象的Terminate事件。
     除 End 語句以外,Stop語句可以暫停一個應用程序。然而,Stop 語句只能在調(diào)試時使用,因為它不釋放對象的引用。
     詳細信息 關于 Stop 語句的信息,請參閱第十三章“調(diào)試代碼和處理錯誤”中的“使用中斷模式”,以及《語言參考》的“Stop 語句”。關于窗體集合或者釋放對象引用的信息,請參閱第九章“用對象編程”。
    在應用程序中使用菜單
     許多簡單的應用程序只由一個窗體和幾個控件組成,但是通過增加菜單可以增強 Visual Basic 應用程序的功能。這一節(jié)將介紹如何在應用程序中創(chuàng)建菜單和使用菜單。