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

