官术网_书友最值得收藏!

第7章 應用程序的臉—窗體和系統對象

本章視頻教學錄像:1小時5分鐘

窗體是應用程序直接與用戶交互的主要界面,是應用程序最重要的一部分,所以窗體的設計顯得尤為重要。具有相同功能的兩個應用程序,良好的窗體設計會給用戶帶來更好的使用體驗。

本章將一步步帶領讀者熟悉窗體的相關概念及屬性,掌握窗體設計的基本方法,以及學會設計多窗體應用程序。

本章要點(已掌握的在方框中打鉤)

□ 熟悉窗體的基本概念

□ 熟悉窗體的屬性、事件和方法

□ 掌握窗體的啟動和結束

□ 了解多窗體設計

□ 了解多窗體特性

7.1 窗體簡介

本節視頻教學錄像:5分鐘

圖形界面的Windows操作系統誕生以來,軟件的編寫又多了一項重要部分——用戶界面的設計。設計良好的軟件界面能夠讓用戶感覺舒適并易于使用。在Visual Basic的軟件設計中,好的窗體設計是成功的一半。

7.1.1 窗體的基本概念

我們日常使用的Windows操作系統又稱為視窗操作系統,它是由一個個窗體所組成的。我們對計算機的所有操作幾乎都是通過各種窗體來完成的,所以窗體既是我們完成各種計算機操作的載體,又是我們與計算機進行溝通的主要方式。一個優秀軟件的界面設計是非常重要的。在Visual Basic中要設計一個窗體,首先要了解的概念是它的屬性、事件和方法。

提示

Windows在英文中的原意是“窗戶、視窗”。在Windows系統誕生之前,計算機上看到的只是枯燥的字幕數字(DOS),微軟公司開發的Windows操作系統,打開了用戶與計算機之間交流的“視窗”,使我們能夠以更加直觀和方便的方式使用計算機。

打開Visual Basic并新建一個工程后,在打開的界面上就會加載一個默認窗體,我們把各種需要的控件放在這個窗體上并編寫每個控件的代碼,即可完成應用程序設計。

7.1.2 在工程中添加窗體的方法

大部分的軟件都擁有多個窗口,因此僅有默認的窗體是不夠的。如果需要創建更多的窗體,可以使用以下兩種方法。

⑴ 選擇【工程】【添加窗體】菜單命令。

⑵ 在工程資源管理器窗口中右擊,在彈出的快捷菜單中選擇【添加】【添加窗體】菜單命令。

不管使用哪種方式,都會打開【添加窗體】對話框,從中選擇需要的窗體類型,然后單擊【打開】按鈕,即可將該窗體添加到工程中。

提示

根據窗體的功能,可以將窗體分為單文檔窗體(SDI)和多文檔窗體(MDI)。每個單文檔窗體均是一個獨立的窗口,而每個多文檔窗體中可以包含多個窗口。

7.2 控制窗體表情—窗體的屬性、方法和事件

本節視頻教學錄像:18分鐘

創建出窗體后,接下來需要根據軟件設計的需要對這個窗體的各種屬性進行設置。可以直接在程序源代碼中編寫和修改窗體的屬性,但是更常用和方便的方法是通過屬性窗口設置。

7.2.1 窗體的屬性

下面介紹一些最常用的窗口屬性的意義和設置方法。

1. 標題屬性(Caption)

標題屬性就是用來設置窗體標題所顯示的文字的。標題屬性既可以通過代碼來設置,也可以直接在屬性窗口中設置。

在代碼中設置標題屬性的語法是:

        窗體名.Caption="String"

其中String就是希望標題所顯示的文字。

在屬性窗口中的設置更為簡單:直接在屬性窗口中的Caption屬性所對應的輸入框中輸入字符即可。

例如有一個窗體Form1,要設置窗體標題為“Hello!”,則可在屬性窗口中設置Caption值為“Hello!”。

設置完成,按【F5】快捷鍵運行程序,實際效果如下圖所示。

提示

使用這兩種方法都可以設置窗口的標題,實際運用中應根據不同情況使用不同的方法。對于在運行中不需要改變標題的窗口,可以采用第2種方法;而對于需要在運行中更改標題的窗口,則應該使用第1種方法。

2. 外觀屬性(Appearance)

外觀屬性中只有兩個選項,分別是Flat和3D,Flat的意思是“平的”,而3D則是常見的三維立體效果。

對比可見,3D屬性的立體感更強一些。外觀屬性的設置和標題屬性的設置類似,直接在屬性窗口中選擇相應的屬性即可。

3. 邊框樣式屬性(BorderStyle)

邊框樣式屬性決定了窗體的邊框外觀和功能。可以通過屬性窗口來對其邊框樣式進行設置。

可以看到,邊框樣式屬性擁有6個選項,含義如表所示。

4. ControlBox屬性

ControlBox屬性用于設置窗體是否顯示控制菜單和【最大化】、【最小化】以及【關閉】等按鈕。當ControlBox屬性為True時,將顯示控制菜單和【最大化】、【最小化】以及【關閉】等按鈕;為False時不顯示。

提示

在Windows操作系統中,每個應用程序都有一個控制菜單,提供還原、移動、調整大小、最大化、最小化和關閉窗口等功能。

右擊標題欄的任意位置,或單擊標題欄左側的圖標,都可以彈出控制菜單。同時按住【Alt+空格】鍵也可以彈出控制菜單。同一程序的控制菜單具有相同的菜單命令。

對ControlBox的屬性可以通過屬性窗口來設置。

5. 最大化按鈕屬性(MaxButton)

最大化按鈕屬性決定最大化按鈕是否起作用。

⑴ 當最大化按鈕屬性為True時,最大化按鈕高亮度顯示,單擊可以使窗口最大化。

⑵ 當最大化按鈕屬性為False時,最大化按鈕低亮度顯示,單擊不能使窗口最大化。

對MaxButton的屬性可以通過屬性窗口來設置。

6. 最小化按鈕屬性(MinButton)

該屬性決定最小化按鈕是否起作用。

⑴ 當最小化按鈕屬性為True時,最小化按鈕高亮度顯示,單擊可以使窗口最小化。

⑵ 當最小化按鈕屬性為False時,最小化按鈕低亮度顯示,單擊不能使窗口最小化。

可以通過屬性窗口來設置最小化按鈕屬性。

提示

如果想顯示最小化按鈕,必須將BorderStyle屬性值設置為1或者2。這樣程序運行時,窗體最小化后,窗體最小化顯示為圖標。

7. 可見屬性(Visible)

該屬性決定窗體或者窗體上的控件在運行時是否可見。當可見屬性為True時,程序運行后將顯示該窗體或控件;當可見屬性為False時,程序運行后將不會顯示該窗體或者控件。可以通過屬性窗口來設置可見屬性。

8. 圖標屬性(Icon)

通過設置該屬性可以改變窗體最小化時所顯示的圖標,該圖標也將顯示在窗體標題欄左側。可以通過屬性窗口來設置圖標屬性。

如果你沒有設置圖標也沒有關系,Visual Basic 6.0將為其設置一個默認圖標:。但如果所有的應用程序都采用這種默認的圖標,那么在較多的程序中找到需要的窗口就很不方便,所以應該適當地為程序指定意義鮮明的圖標。

提示

對于窗體的屬性,可以實際動手設置一下,看看選擇不同的屬性值后有什么不一樣的地方,通過實際操作可以對這些屬性值有更切身的感受。

7.2.2 窗體的方法

窗體的方法是指對窗體的各種操作,如“顯示窗體”方法(Show)、“隱藏窗體”方法(Hide)、“移動窗體”方法(Move)、“顯示彈出式菜單”方法(PopupForm)和“打印窗體”方法(PrintForm)等。現將常用的方法介紹如下。

1. “顯示窗體”方法(Show)

“顯示窗體”方法用來顯示窗體,其語法格式如下。

      [Object].Show [Model],[OwnerForm]

其中,Object用于指定窗體對象,Model用于指定窗體是模式窗體還是無模式窗體。Model值為0時,窗體為無模式窗體;值為1時,窗體為模式窗體。

需要注意的是,模式窗體顯示后一直占據焦點,其他窗體暫時不可用,所以使用模式窗體來實現多窗體有嚴格操作步驟的程序,如軟件安裝程序。

OwnerForm用于指定窗體對象,指定的窗體可以看作為Object窗體的父窗體。

提示

Object窗體始終位于指定窗體前面,且關閉或最小化OwnerForm窗體時,Object窗體也隨之關閉或最小化。

2. “隱藏窗體”方法(Hide)

大部分的軟件一般含有多個窗體,分別用于實現不同的功能。在很多時候并不需要顯示所有的窗口,使用隱藏窗體功能可以為工作區域節省很多屏幕空間。

“隱藏窗體”方法用于隱藏窗體但不關閉窗體,其語法格式如下。

      [Object].Hide 'Object用于指定窗體對象

7.2.3 窗體的事件

事件驅動的編程機制是Visual Basic的一大特點。窗體中提供有很多的事件來表達各種觸發條件,如表所示。

例如:有一個窗體Form1,要在加載窗體時設置窗體標題為“此窗體已加載”,則可添加如下代碼。

        01 Private Sub Form_Load()  '窗體加載事件
        02   Form1.Caption="此窗體已加載"'設置From1的Caption值
        03 End Sub

程序運行效果如圖所示。

7.3 窗體的生命周 期

本節視頻教學錄像:7分鐘

窗體的啟動、運行和關閉,是窗體由“生”到“亡”的一個生命周期。下面就來了解一下窗體的“一生”過程。

7.3.1 選擇啟動窗體

當我們建立一個應用程序的時候,應用程序中的第1個窗體默認被指定為啟動窗體。應用程序開始運行時,這個窗體就會顯示出來。可以通過改變啟動窗體來使其他窗體在啟動時顯示出來,操作步驟如下。

⑴ 選擇【工程】【屬性】菜單命令,彈出【工程屬性】對話框。

⑵ 在【通用】選項卡中的【啟動對象】下拉列表中,選取要作為啟動窗體的窗體。

⑶ 單擊【確定】按鈕,即可完成更改啟動窗體的操作。

注意

選擇的啟動對象一定要是已經存在的,如果選擇了不存在的啟動對象,在編譯運行時會出錯,并彈出【工程屬性】對話框,要求重新選擇啟動對象。

7.3.2 快速顯示窗體

如果啟動時有一個較長的執行過程,例如要從數據庫中裝入大量的數據,或者要裝入一些大型位圖,這時如果能夠提供一個快速顯示窗體,將會消除用戶等待時的焦急感并了解一些軟件使用信息。

技巧

快速顯示是一種窗體,它通常顯示的是應用程序名、版權信息或者一個簡單的位圖之類的內容。啟動Word 2007時所顯示的屏幕就是一個快速顯示。

要顯示快速顯示窗體,需要用Sub Main過程作為啟動對象,并用Show方法顯示該窗體。

        01 Private Sub Main()
        02   frmSplash.Show       '顯示快速顯示
        03   ...    '在此處添加啟動過程
        04   frmMain.Show  '顯示主窗體并卸載快速顯示
        05   Unload frmSplash
        06 End Sub

啟動過程完成,可以裝入第1個窗體并使快速顯示卸載。

7.3.3 結束窗體

在很多人的印象里,當一個應用程序的所有窗體都關閉的時候,就意味著這個程序停止運行了。

然而事實并非如此,很多程序雖然沒有任何窗體顯示了,但是在后臺仍然默默地運行著。出現這種情況的原因是對任何已卸載窗體的屬性或控件的任何訪問,都將導致隱含地、不予顯示地加載那個窗體。

為了保證在關閉所有的窗體后程序確實已經停止運行,最好的辦法是確保所有的窗體都已被卸載。如果應用程序只有一個窗體,則在主窗體上可以用一個名為cmdQuit的命令按鈕退出程序,Click事件過程代碼如下。

        01 Private Sub cmdQuit_Click()
        02   Unload Me    '卸載窗體
        03 End Sub

如果有1個以上的窗體,可以使用Forms集合和Unload語句,通過把代碼放入主窗體的Unload事件過程卸載這些窗體。

通過使用Forms集合可以確保找到并關閉所有窗體。下列代碼就是使用窗體集合來卸載所有窗體的。

        01 Private Sub Form_Unload(Cancel As lnteger)
        02   Dim i as integer
        03   For i=Forms.Count-1 to 0 Step-1     '在窗體集合中遍歷并卸載每個窗體
        04    Unload Forms(i)
        05  Next
        06 End Sub

有的時候我們需要不顧現存窗體或對象的狀態而強制結束應用程序,此時可以使用Visual Basic中的End語句。

End語句用于使應用程序立即結束。在End語句之后的代碼不會執行,任何窗體的QueryUnload、Unload或Terminate等事件過程也不會被執行,對象的各個引用將被釋放,也不會再有事件發生。

7.4 多窗體設計

本節視頻教學錄像:5分鐘

多文檔界面(Multiple Document Interface,MDI)和單文檔界面(Single Document Interface,SDI)是Windows應用程序最為常見的兩種結構。MDI是在一個應用程序中能夠同時處理兩個或者兩個以上窗體的界面形式,利用鼠標單擊某個文檔,該文檔則成為活動文檔,也稱多文檔程序。

技巧

多文檔界面和單文檔界面的不同之處在于:SDI中的各個窗體是相互獨立的,例如IE瀏覽器;而MDI中的窗體則有主從關系,例如Excel軟件。

7.4.1 創建多窗體應用程序

創建MDI應用程序,首先要在工程中創建一個MDI窗體,然后在這個MDI窗體中創建多個子窗體。具體的操作步驟如下。

⑴ 啟動Visual Basic 6.0,在彈出的【新建工程】對話框中選擇【標準EXE】圖標,然后單擊【打開】按鈕。

⑵ 選擇【工程】下拉菜單中的【添加MDI窗體】選項,彈出【添加MDI窗體】對話框,從中選擇新建或者現存的MDI窗體,在這里選擇新建MDI窗體,然后單擊【打開】按鈕。

⑶ 彈出一個顏色為深褐色的名為MDIForm1的新窗體。

⑷ 選擇Form1窗體,將屬性窗口中的MDIChild屬性設置為【True】,即將Form1窗體設置為MDIForm1窗體的子窗體。

⑸ 運行程序,Form1窗體已經在MDIForm1窗體中了。

7.4.2 多窗體特性

多窗體工程中的子窗體具有以下一些特性。

⑴ 所有子窗體均只在主窗體的內部顯示,用戶在主窗體中可以任意地移動和改變子窗體的大小,但是不能將子窗體移動到主窗體之外。

⑵ 子窗體最小化后,其圖標將出現在主窗體的最下方,而不是出現在用戶桌面上。

⑶ 子窗體未最大化時,各個子窗體具有自己的標題。

⑷ 最大化后,子窗體的標題將和主窗體的標題合并,并在主標題欄中顯示出來。

7.5 登錄窗體設計實例

本節視頻教學錄像:15分鐘

本節通過一個實例來加深對窗體程序設計的理解。

【范例7-1】 用戶登錄界面設計,實例運行后將顯示類似軟件登錄界面的效果,輸入正確的用戶名和密碼后,即可顯示主窗體;如果用戶名和密碼不正確,將顯示警告窗口,要求重新輸入。

⑴ 啟動Visual Basic 6.0,在彈出的【新建工程】對話框中選擇【標準EXE】圖標,然后單擊【打開】按鈕。

⑵ 將Form1的Caption屬性改為“用戶登錄”。

⑶ 在窗體中添加兩個Command Button控件、兩個Label控件和兩個TextBox控件。屬性設置如表所示。

⑷ 選擇【工程】菜單下的【添加窗體】菜單項,在彈出的【添加窗體】對話框中選擇【窗體】為工程添加一個窗體Form2。

⑸ 更改Form2的Caption屬性為“系統主界面”,ControlBox屬性值為“False”。在Form2中添加文本框控件,設置該控件的【名稱】屬性為“Txt1”,Text屬性值為“歡迎你進入系統”;添加命令按鈕控件,設置該控件的【名稱】屬性為“Cmd3”,Caption屬性值為“退出”。將Form2中的控件拖動到合適位置并調整大小。

⑹ 雙擊Form1窗體空白處,在彈出的代碼窗口中輸入以下代碼(代碼7-1-1.txt)。

        01 Private Sub Form_Load()  '窗體1加載事件代碼
        02  Form1.Show
        03  Form2.Hide
        04 End Sub
        05 Private Sub Txt1_KeyDown(KeyCode As lnteger,Shift As lnteger)
            '用戶名文本框KeyDown事件代碼
        06  lf Txt1.Text="user"And KeyCode=vbKeyReturn Then
            '若用戶名文本框輸入正確且Enter鍵被按下
        07   Txt2.SetFocus '密碼文本框激活
        08  Elself Txt1.Text<>"user"And KeyCode=vbKeyReturn Then '若用戶名文本框輸入不正確
        09   MsgBox"請輸入正確的用戶名!",vbOKOnly+vblnformation,"注意"       '顯示警告窗口
        10  End lf
        11 End Sub
        12 Private Sub Txt2_KeyDown(KeyCode As lnteger,Shift As lnteger)
            '密碼文本框KeyDown事件代碼
        13 lf Txt2.Text="123456"And KeyCode=vbKeyReturn Then
            '若密碼文本框輸入正確且Enter鍵被按下
        14   Form1.Hide    '窗體1隱藏
        15   Form2.Show
        16   Elself Txt2.Text<>"123456"And KeyCode=vbKeyReturn Then
            '若密碼文本框輸入不正確
        17   MsgBox"請輸入正確的密碼!",vbOKOnly+vblnformation,"注意"  '顯示警告窗口
        18 End lf
        19 End Sub

⑺ 雙擊Form1窗體中的【確定】按鈕控件,在彈出的代碼窗口中輸入以下代碼(代碼7-1-2.txt)。

        01 Private Sub Cmd1_Click() '確定按鈕鼠標單擊事件代碼
        02  lf Txt1.Text="user"Then '若用戶名文本框輸入正確
        03   Txt2.SetFocus '密碼文本框激活
        04  Elself Txt1.Text<>"user"Then    '若用戶名文本框輸入不正確
        05    MsgBox"請輸入正確的用戶名!",vbOKOnly+vblnformation,"注意"      '顯示警告窗口
        06  End lf
        07  lf Txt2.Text="123456"Then      '若密碼文本框輸入正確
        08   Form1.Hide    '窗體1隱藏
        09   Form2.Show   '窗體2顯示
        10 Elself Txt2.Text<>"123456"Then  '若密碼文本框輸入不正確
        11   MsgBox"請輸入正確的密碼!",vbOKOnly+vblnformation,"注意"  '顯示警告窗口
        12  End lf
        13 End Sub

⑻ 雙擊Form1中的【取消】按鈕控件,在彈出的代碼窗口中輸入以下代碼。

        01 Private Sub Cmd2_Click() '取消按鈕鼠標單擊事件代碼
        02  End   '退出程序
        03 End Sub

⑼ 雙擊Form2中的【退出】按鈕控件,在彈出的代碼窗口中輸入以下代碼。

        01 Private Sub Cmd3_Click() '退出按鈕鼠標單擊事件代碼
        02  End   '退出程序
        03 End Sub

【代碼詳解】

在第⑹步代碼中,Form1.Show用于顯示Form1,Form2.Hide用于隱藏Form2。

在第⑺步代碼中用If判斷函數來判斷輸入的用戶名及密碼是否正確,如果正確則顯示Form2,如果不正確則彈出警告窗口提示“請輸入正確的用戶名!”及“請輸入正確的密碼!”。

第⑻及第⑼步則是為Form1中的【取消】按鈕控件及Form2中的【退出】按鈕控件添加結束程序語句。

【運行結果】

單擊工具欄中的【啟動】按鈕,即可看到程序運行結果。

【范例分析】

通過本例,我們學習了在工程中添加窗體、在窗體中添加不同控件、改變窗體外觀、控制窗體的顯示與隱藏等方法。

【拓展訓練7-1】 用戶登錄界面設計2。

在【范例7-1】中,在關閉系統主界面后直接退出程序,如果想單擊【退出】按鈕后,再返回到用戶登錄界面中,應該怎么辦呢?

只需修改Form2中的【退出】按鈕為如下代碼就可以實現。

        01 Private Sub Cmd3_Click() '退出按鈕鼠標單擊事件代碼
        02   Form1.Show  '窗體1顯示
        03   Unload Me    '卸載窗體
        04 End Sub

這樣,單擊【退出】按鈕后,Form1窗體將顯示,而Form2窗體將隱藏。

7.6 系統對象

本節視頻教學錄像:12分鐘

系統對象指的Visual Basic提供的內置對象,主要包括App對象、Clipboard對象、Screen對象、Printer對象等,能夠在Visual Basic 6.0中被隨時調用,完成一定的功能。本小節將對幾種常用系統對象進行詳細介紹。

7.6.1 應用程序APP對象

App對象是通過關鍵字App訪問的全局對象。其提供了十多個屬性,包括應用程序的標題、版本信息、可執行文件和幫助文件的路徑及名稱以及是否運行前一個應用程序的示例。App對象的主要屬性如表所示。

其中,App對象的兩種重要屬性App.Path和App.EXEName應用較多。App.Path在Visual Basic編程狀態下返回.MAK文件所在目錄;在以.EXE文件運行時,則返回.EXE文件所在目錄。App. EXEName返回程序名。

App對象的典型應用在實現相對路徑上。在Visual Basic中,程序總是按編程時固定好的路徑讀寫文件,但文件路徑改變,程序就找不到路徑了,因此不能正常寫文件。

7.6.2 屏幕Screen對象

Screen對象指的是整個Windows桌面。Screen對象可以訪問當前窗體、控件以及其他與屏幕相關的信息。如屏幕鼠標指針的修改。下表為Screen對象的常見屬性。

例如實現在系統字體中搜索Arial字體,找到后給出提示。設計結果如下。

在窗體上添加圖片框Picturel和時鐘Timer1控件,將其Interval屬性設置為1000,雙擊圖片框Picturel編寫代碼如下。

        01 Private Sub Timer1_Timer()           '定時器的Timer事件
        02 Static screenfontscount As lnteger
        03 lf screenfontscount<Screen.FontCount Then
        04 Screen.ActiveControl,Cls            '調用方法清除屏幕
        05 Screen.ActiveControl.Print Screen.Fonts(screenfontscount)'調用方法顯示字體
        06 lf Trim(Screen.Fonts(screenfontscount))="Arial"Then
        07 Timer1.Enabled=False              '停止搜索
        08 MsgBox"這是我要選擇的字體"          '給出提示
        09 Exit Sub                    '退出程序
        10 End lf
        11 screenfontscount=screenfontscount+1          '循環變量加1
        12 End lf
        13 End Sub

Timer控件在后續章節會詳細講解。設置其Interval屬性為1000,即設置其每過1000毫秒執行一次其中的代碼。運行上述示例。其結果如下圖所示。其中,Picturel控件中的字體名稱一直會變化,直到找到Arial字體為止,找到后,顯示如下的提示信息。

7.6.3 剪貼片Clipboard對象

Clipboard對象用于操作剪貼板加上的文本和圖形,它使用戶能夠復制、剪切和粘貼應用程序中的文本和圖形。該對象的常用方法如表所示。

例如,利用Clipboard對象將圖片框Picture1中的圖片粘貼到文本框Picture2中,將Clipboard對象中的文本粘貼到文本框Text1中。設計如圖所示的窗體。

在Picture2控件的單擊實踐中輸入代碼如下。

        01 Private Sub Picture2-click()
        02 Clipboard.Clear        '清除Clipboard對象'
        03 Clipboard.SetData Picture1.picture '用指定圖像格式將圖片放到Clipboard對象上'
        04 Picture2=loadpicture("") '返回圖片的位置'
        05 Picture2=Clipboard.GetData()  '從Clipboard對象返回一個圖形'
        06 End sub

在Text1控件的單擊事件中輸入如下代碼。

        01 Private Sub Text1-Click()
        02 Text1=Clipboard.GetText()    '返回Clipboard對象中的文本字符串'
        03 End Sub

運行該示例,當用戶單擊picture2控件時,其將Picture1控件中的對象復制到Picture2控件中。

示例運行結果如下圖所示。

7.6.4 調試Debug對象

Debug是一個隱藏的對象,用于進行和調試相關的工作。在調試程序的時候使用Debug會很方便。比如Debug.Print a會在VB界面下方的“立即”窗口中顯示出a的值,這樣你就不必修改程序的界面來顯示a或者中斷程序來查看a。再比如當你在某處需要a>5的時候,你可以加一句Debug.Assert(a>5),當a<=5的時候程序執行到此處就會暫停,然后你就可以查看a為何沒有滿足a>5的條件,從而找到代碼錯誤。

Debug的一個重要優點是,當你把程序編譯成成品EXE之后,這些Debug語句都被剔除,也就是說你在程序中加入Debug語句并不會影響最終成品的效率和界面。Debug只是為調試人員存在的。

7.7 高手點撥

本節視頻教學錄像:3分鐘

1. Form_Activate

當一個對象成為活動窗口時發生,使用此過程請注意一下,如果在一個多窗體的程序中,例如,Form1中從慢點Command1按鈕Form2.Show的話,并且Form2的Borderstyle屬性為0,3,4,5中之一的值的話,千萬不要再在這個過程里面加入MsgBox函數,要不然就會反復地彈出對話框。如果再在form1中的這個過程中加入MsgBox的話那就更熱鬧了,因為在MsgBox點擊確定后會執行Form_Activate過程。

2. Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

發生于Form_Unload之前,多一個可以判別結束方式的變量。

UnloadMode值的含義如下表所示。

如果用于MDI窗口中并且直接關閉parent窗口時,過程順序如下。

⑴ parent.QueryUnload

⑵ child.QueryUnload

⑶ child.Unload

⑷ parent.Unload

只要子窗體被Load,都會執行Child的QueryUnload,Unload過程。

3. 另外一種窗體打開方式

一般的打開方式就是Form1.Show或者是Form1.Visible = True。但是如果在打開某個窗體前使用窗體的屬性時,就會產生Load事件,如果在Load里面在自己Show一下就顯示出來了。不同打開方式的結果列表如下。

        Private Sub Command1_Click()
        Form2.Show '依次執行Form_Initialize,Form_Load,Form_Activate
        End Sub
        Private Sub Command2_Click()
        Form2.Visible = True '依次執行Form_Initialize,Form_Load,Form_Activate
        End Sub
        Private Sub Command3_Click()
        Form2.Visible = False '依次執行Form_Initialize,Form_Load,不顯示窗口
        End Sub
        Private Sub Command4_Click()
        Form2.Left = 0 '依次執行Form_Initialize,Form_Load,不顯示窗口
        End Sub

第一次打開窗口后,如果Unload時不寫代碼Set Form1 = Nothing,那么在此打開時會不執行Form_Initialize過程。

如果窗體已經顯示,那么Form2.Visible = True是不能激活Form_Activate過程的,而Form2.Show卻可以。

還有如果是MDI文檔的子窗體,在用Show或者Visible方法時都是不會執行Form_Activate過程的。

7.8 實戰練習

一、思考題

1. 列舉窗體的3個主要屬性及其作用。

2. 單窗體應用程序和多窗體應用程序有什么不同?

二、操作題

在Visual Basic 6.0中設計一個單窗體應用程序,完成以下功能。

⑴ 窗體名稱為“Form1”,標題為“顯示與刪除”,最小化按鈕可用,最大化按鈕不可用。

⑵ 在窗體中添加一個名稱為Cmd1,標題為“顯示”的命令按鈕。

⑶ 如果單擊命令按鈕,則執行語句Form1.Print"顯示";如果單擊窗體,則執行語句Form1.Cls。

主站蜘蛛池模板: 焦作市| 松潘县| 济南市| 金门县| 诸暨市| 通许县| 新源县| 阿尔山市| 宜丰县| 鹤壁市| 镇雄县| 汾阳市| 河南省| 岑巩县| 南充市| 潜江市| 凯里市| 茂名市| 沈丘县| 滁州市| 玉山县| 阳江市| 铁岭县| 邯郸市| 历史| 陇川县| 灵川县| 壶关县| 皮山县| 青川县| 眉山市| 林西县| 彭阳县| 岗巴县| 峡江县| 伊宁县| 图们市| 璧山县| 高邑县| 汕尾市| 威信县|