任何一個應(yīng)用程序,都需要通過各種命令來達成某項功能,而這些命令,大多數(shù)是通過程序的菜單來實現(xiàn)的,如我們常常用到的記事本的菜單
圖一
VB 提供了一個菜單編輯器,專門用來制作各式各樣的菜單,它在標準工具欄中的圖標如圖二:
圖二
雙擊該圖標,彈出如圖三的窗口,通過這個窗口,我們就可以制作菜單了。
圖三
當(dāng)然,程序光是有菜單還不行,它只是為用戶提供了便捷的操作接口,程序功能的最終實行,還必須通過給這些菜單輸入復(fù)雜的程序才能得以實現(xiàn)。
下面,我們以 Windows 自帶的筆記本為例,介紹如何用 VB 制作菜單。
一、菜單制作:
1、雙擊如圖二的菜單編輯器圖標,然后彈出如圖三的編輯窗口。
2、標題:顯示在菜單中的文本,這里,我們輸入“文件(&F)”字樣。
(&F) 是什么東西?這是為了方便用戶使用鍵盤操作菜單,當(dāng)程序運行時,(&) 字樣不會出現(xiàn),而是在字母 F 下加上一條橫線,這表示,只要用戶在按住 Alt 鍵的同時再按下 F 鍵,就相當(dāng)于用鼠標點擊“文件”這個菜單命令了。也就是說,文件菜單的快捷鍵是 Alt+F 。
名稱:本菜單在程序中的名稱,主要用作程序調(diào)用,因此記得用英文名,另外,名字最好一目了然,這里,我們將“文件”菜單命名為 MenuFile 。
“文件”菜單制作完畢,如圖四:
圖四
3、點擊菜單編輯器上的“下一個”按鈕,制作下一個菜單,這時,我們看到,編輯區(qū)域自動提到了下一行,如圖五:
圖五
點擊向右按鈕,本行前面出現(xiàn)了四個小點,表示本菜單降了一級,是二級菜單(依此類推,如果要制作三級菜單,只需要再點一下向右按鈕進行降級就行了)。然后用第二步的方法,制作“新建”(MenuNew)、“打開”(MenuOpen)、“保存”(MenuSave)、“另存為”(MenuSaveOther)菜單,結(jié)果如圖六:
圖六
上面講到了用 & 符號制作快捷鍵的方法,這里我們再使用 VB 菜單編輯器中的“快捷鍵”定制方法制作快捷鍵。
找到“新建”菜單,先在“新建(&N)”字樣后面添加六個空格,以便后面顯示的快捷鍵跟菜單名之間有點空隙,然后在快捷鍵下拉列表中選擇 Ctrl+N ,這表示在按住 Ctrl 鍵的同時按 N 鍵就能使用“新建”命令了,如下圖:
4、制作菜單分隔線:
“另存為”菜單下面是條分隔線,那么分隔線如何表示呢?很簡單,只需在“標題”框中輸入“-” 就行了,命名為 MenuSperate1 ,然后點按“下一個”按鈕制作下面的菜單。如圖七:
圖七
5、同理可做“頁面設(shè)置”(MenuPage)、“打印”(MenuPrint)、“分隔線二”(MenuSeprate2)、“退出菜單”(MenuQuit),如圖八:
圖八
6、制作“編輯”菜單:
由于“編輯菜單”是一級菜單,所以在完成“退出”菜單,并點按“下一個”按鈕后,別忘了點按向左按鈕,將當(dāng)前菜單進行升級,這時可以看到,本行前面的四個小點消失了,如圖九:
圖九
7、根據(jù)前面學(xué)到的知識,我們制作“編輯”(MenuEdit)、“撤消”(MenuUndo)、“分隔條三”(MenuSeprate3)、“剪切”(MenuCut)、“復(fù)制”(MenuCopy)、“粘貼”(MenuPaste)、“刪除”(MenuDel)、“分隔條四”(MenuSeprate4)、“全選”(MenuSelectAll)、“時間/日期”(MenuDate)、“分隔條五”(MenuSeprate5)、“自動換行”(MenuWrap)、“設(shè)置字體”(MenuFont)菜單。如圖十:
圖十
8、添加 RichText 控件:
最后在窗體內(nèi)添加一個 RichText 控件,結(jié)果如圖十一:
圖十一
在默認的工具箱面板中,RichText 控件沒有羅列出來,大家可以用鼠標右鍵點擊工具箱面板,在彈出的面板中選擇“部件”,然后在彈出的窗口中找到“Microsoft Rich Textbox Control 6.0”,勾選本控件的復(fù)選框,最后“確定”就行了,如圖十二:
圖十二
二、菜單屬性設(shè)置:
對各個菜單的屬性設(shè)置,可以在制作菜單的過程中進行,也可以在菜單設(shè)計完畢后集中進行處理。
1、菜單的“有效”性:
只有當(dāng)菜單處于“有效”狀態(tài)時才能被使用。
對于一個新的空白文件來說,撤消、剪切、復(fù)制、粘貼的命令缺少操作對象,所以在初始狀態(tài)下,它們應(yīng)該是“無效”的。
打開菜單編輯器,找到“撤消”菜單,然后將“有效”復(fù)選框前的勾去掉,這樣,“撤消”菜單無效了,如圖十三:
圖十三
同理,將“剪切”、“復(fù)制”、“粘貼”三個菜單變?yōu)?#8220;無效”。
2、復(fù)選菜單:
在記事本中,“自動換行”可以對文本的顯示進行換行控制,默認狀態(tài)為“非自動換行”模式,點擊一次則啟動“自動換行”模式,再點擊一次就取消“自動換行”,象這種菜單,我們稱為“復(fù)選菜單”。
復(fù)選菜單的制作非常簡單,只需找到要作為復(fù)選菜單的那個菜單,然后勾選“復(fù)選”按鈕就行了,如圖十四:
圖十四
有如圖一這樣一個小程序,通過“菜單”下的色彩設(shè)置,可以將窗體的背景分別改為“紅”、“綠”、“藍”色,點擊“菜單”下的“退出”,則自動退出程序。
圖一
一、界面設(shè)置:
根據(jù)第一節(jié)學(xué)到的知識,我們制作一個如圖二的菜單。
圖二
需要注意的是,“菜單”為一級,“色彩設(shè)置”、“退出”為二級、“紅色”、“綠色”、“藍色”為三級菜單,根據(jù)圖二中每行前面點的多少可以判斷出來。
另外,不要忘記勾選“紅”、“綠”、“藍”三種色彩的菜單前的“復(fù)選”選項。
二、輸入程序代碼:
1、退出菜單:
在 VB 中,End 是專門用來退出程序的命令,因此,我們在“退出菜單”中輸入如下代碼:
Private Sub MenuQuit_Click()
End
End Sub
這樣,只要點擊本菜單,自動退出程序。
2、復(fù)選菜單的判斷:
在 VB 中,可以用如下語法對復(fù)選菜單進行判斷:
復(fù)選菜單名.Checked = True/False
當(dāng)值為 True ,復(fù)選菜單被選中;值為 False ,菜單未被選中。
3、我們要讓程序在初始狀態(tài)下保持本色,在 Form 的裝入事件中輸入以下代碼:
Private Sub Form_Load()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = False
End Sub
這段程序,讓三個復(fù)選菜單都處于未被選中狀態(tài)(在程序運行時起作用,在設(shè)計過程中,三個復(fù)選菜單始終是處于選中狀態(tài))。
4、當(dāng)按下紅色菜單(MenuRed):
Private Sub MenuRed_Click()
MenuRed.Checked = True
MenuGreen.Checked = False
MenuBlue.Checked = False
Form1.BackColor = vbRed
End Sub
這段代碼,讓“紅色菜單”處于選中狀態(tài),而其他顏色的菜單處于未被選中狀態(tài),同時將窗體的背景色變?yōu)榧t色(VbRed)。
5、當(dāng)按下綠色菜單(MenuGreen):
Private Sub MenuGreen_Click()
MenuRed.Checked = False
MenuGreen.Checked = True
MenuBlue.Checked = False
Form1.BackColor = vbGreen
End Sub
綠色菜單處于選中狀態(tài),其他菜單非選中,同時窗體背景色變?yōu)榫G色。
6、按下藍色菜單:
Private Sub MenuBlue_Click()
MenuRed.Checked = False
MenuGreen.Checked = False
MenuBlue.Checked = True
Form1.BackColor = vbBlue
End Sub
藍色菜單處于選中狀態(tài),其他菜單非選中,同時窗體背景變?yōu)樗{色。
7、最后按 F5 鍵,如何,程序正常運行了吧?
三、聯(lián)想:
本節(jié)我們講到復(fù)選菜單是如何對選中進行判斷的,那就是看 Checked 值是否為 True 。
前面我們學(xué)過單選按鈕(OptionBUtton)、復(fù)選按鈕(CheckBox),它們也有是否被選中的判斷,那么,它們有什么不同呢?
注意,單選按鈕是否選中的判斷:
單選按鈕名.Value = True/False 。由于單選按鈕只能二選一或多選一,所以往往不需判斷,只需響應(yīng) Click 事件就行了。
復(fù)選按鈕的判斷:
我們在上一節(jié)示例的基礎(chǔ)上,來制作如圖一的小程序,每點擊一次“增加信息”命令,菜單上會自動增加一個“信息”菜單,每點擊一次“清除菜單”命令,程序自動清除當(dāng)前信息菜單;當(dāng)菜單回復(fù)原樣,即只剩“信息”菜單時,“清除菜單”無效。
圖一
一、界面設(shè)置:
在第二節(jié)最終結(jié)果的基礎(chǔ)上,創(chuàng)建如圖一的界面,需要注意的是,“信息”菜單(MenuHint)必須在前面的“索引”框中填入數(shù)字 0,如圖二:
圖二
在程序中,只要在“索引”文本中輸入了數(shù)字,就代表這個菜單成為了一個“菜單數(shù)組”,通過這個“菜單數(shù)組”可以實現(xiàn)菜單的動態(tài)增加與清除。
二、程序代碼:
1、為“信息菜單”指定變量:
對于增加或清除菜單命令,我們可以這樣看:原始的“信息菜單”為 MenuHint(0) ,這也是索引值為 0 的意義所在;那么增加的一個信息菜單就應(yīng)該為 MenuHint(1),再增加一個,就應(yīng)該為 MenuHint(2),依此類推;清除一個信息菜單也類似,如果當(dāng)前是 MenuHint(X),那么清除一個后應(yīng)該為 MenuHint(X-1),依此類推。
指定索引值為 HintNumber ,那么增加時,應(yīng)該是 HintNumber = HintNumber + 1 ;清除時,應(yīng)該是 HintNumber = HintNumber -1 。
2、變量的作用域:
一個變量的作用域倒底有多大?這得由變量的類型來決定。當(dāng)一個變量只在某一個過程或事件(如某個按鈕的單擊事件)中起作用,那么它就是局部變量,可以在事件中直接定義;當(dāng)一個變量可以在整個窗體內(nèi)供使用,那么它可能是窗體層變量或全局變量,凡是在這個窗體上的事件都可以對這個變量進行引用,這種變量只能在“通用”過程中進行“聲明”。
因為 HintNumber 既要在“增加菜單”事件中引用,又要在“清除菜單”事件中引用,所以我們將它作為窗體層變量在“通用”過程的“聲明”中對其進行定義,如圖三:
圖三
圖三中的代碼如下:
Dim HintNumber As Integer
3、在窗體的載入事件中讓 HintNumber 為初始值 0 ,再加上原來的代碼,結(jié)果如圖四:
圖四
4、“增加信息”菜單的 Click 事件:
Private Sub MenuAdd_Click()
HintNumber = HintNumber + 1
Load MenuHint(HintNumber)
MenuHint(HintNumber).Caption = "信息" & HintNumber
End Sub
上面程序的意義在于,先計算 HintNumber + 1 并將結(jié)果賦給新的 HintNumber ,然后通過 Load 命令打開一個新菜單 MenuHint(HintNumber) ,并讓新菜單的標題變成“信息X”,其中,X是數(shù)字,表示這是第幾個信息菜單。
5、“清除信息”菜單的 Click 事件:
Private Sub MenuClear_Click()
If HintNumber = 0 Then
Exit Sub
Else
Unload MenuHint(HintNumber)
HintNumber = HintNumber - 1
End If
End Sub
上面的代碼,先對 HintNumber 值進行判斷,當(dāng) HintNumber 為 0 即程序的初始狀態(tài)時,直接退出當(dāng)前過程(Exit Sub 是退出當(dāng)前過程的命令,切記);如果 HintNumber 不為 0 ,那么卸載索引值最高的信息菜單,即 MenuHint(HintNumber) ,然后講算 HintNumber -1 并將結(jié)果賦給新的 HintNumber ,并最后退出條件判斷。
6、“清除信息”菜單的“有效性”:
如果程序處于初始狀態(tài),即“信息菜單”的索引值為 0 ,那么“清除信息”命令無效,否則有效。由于只有先點擊“幫助菜單(MenuHelp)”才能彈出“清除信息菜單(MenuClear)”,所以可以在 MenuHelp 的點擊事件中輸入以下代碼:
Private Sub MenuHelp_Click()
If HintNumber = 0 Then
MenuClear.Enabled = False
Else
MenuClear.Enabled = True
End If
End Sub
7、測試:
按鍵盤上的 F5 鍵,對程序進行最終的測試。
三、提醒:
本節(jié)最重要的是掌握諸如 HintNumber 這種輔助變量,它將鼠標的點擊動作用數(shù)字的形式加以詮釋,通過值的加減來完成菜單的動態(tài)增加與清除。
這種輔助變量的使用,在 VB 中幾乎是無處不在的,如前面我們在講 For……Next……的語法時說的作為累加器的變量。