我們在上一節(jié)示例的基礎(chǔ)上,來制作如圖一的小程序,每點(diǎn)擊一次“增加信息”命令,菜單上會自動(dòng)增加一個(gè)“信息”菜單,每點(diǎn)擊一次“清除菜單”命令,程序自動(dòng)清除當(dāng)前信息菜單;當(dāng)菜單回復(fù)原樣,即只剩“信息”菜單時(shí),“清除菜單”無效。
圖一
一、界面設(shè)置:
在第二節(jié)最終結(jié)果的基礎(chǔ)上,創(chuàng)建如圖一的界面,需要注意的是,“信息”菜單(MenuHint)必須在前面的“索引”框中填入數(shù)字 0,如圖二:
圖二
在程序中,只要在“索引”文本中輸入了數(shù)字,就代表這個(gè)菜單成為了一個(gè)“菜單數(shù)組”,通過這個(gè)“菜單數(shù)組”可以實(shí)現(xiàn)菜單的動(dòng)態(tài)增加與清除。
二、程序代碼:
1、為“信息菜單”指定變量:
對于增加或清除菜單命令,我們可以這樣看:原始的“信息菜單”為 MenuHint(0) ,這也是索引值為 0 的意義所在;那么增加的一個(gè)信息菜單就應(yīng)該為 MenuHint(1),再增加一個(gè),就應(yīng)該為 MenuHint(2),依此類推;清除一個(gè)信息菜單也類似,如果當(dāng)前是 MenuHint(X),那么清除一個(gè)后應(yīng)該為 MenuHint(X-1),依此類推。
指定索引值為 HintNumber ,那么增加時(shí),應(yīng)該是 HintNumber = HintNumber + 1 ;清除時(shí),應(yīng)該是 HintNumber = HintNumber -1 。
2、變量的作用域:
一個(gè)變量的作用域倒底有多大?這得由變量的類型來決定。當(dāng)一個(gè)變量只在某一個(gè)過程或事件(如某個(gè)按鈕的單擊事件)中起作用,那么它就是局部變量,可以在事件中直接定義;當(dāng)一個(gè)變量可以在整個(gè)窗體內(nèi)供使用,那么它可能是窗體層變量或全局變量,凡是在這個(gè)窗體上的事件都可以對這個(gè)變量進(jìn)行引用,這種變量只能在“通用”過程中進(jìn)行“聲明”。
因?yàn)?HintNumber 既要在“增加菜單”事件中引用,又要在“清除菜單”事件中引用,所以我們將它作為窗體層變量在“通用”過程的“聲明”中對其進(jìn)行定義,如圖三:
圖三
圖三中的代碼如下:
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
上面程序的意義在于,先計(jì)算 HintNumber + 1 并將結(jié)果賦給新的 HintNumber ,然后通過 Load 命令打開一個(gè)新菜單 MenuHint(HintNumber) ,并讓新菜單的標(biāo)題變成“信息X”,其中,X是數(shù)字,表示這是第幾個(gè)信息菜單。
5、“清除信息”菜單的 Click 事件:
Private Sub MenuClear_Click()
If HintNumber = 0 Then
Exit Sub
Else
Unload MenuHint(HintNumber)
HintNumber = HintNumber - 1
End If
End Sub
上面的代碼,先對 HintNumber 值進(jìn)行判斷,當(dāng) HintNumber 為 0 即程序的初始狀態(tài)時(shí),直接退出當(dāng)前過程(Exit Sub 是退出當(dāng)前過程的命令,切記);如果 HintNumber 不為 0 ,那么卸載索引值最高的信息菜單,即 MenuHint(HintNumber) ,然后講算 HintNumber -1 并將結(jié)果賦給新的 HintNumber ,并最后退出條件判斷。
6、“清除信息”菜單的“有效性”:
如果程序處于初始狀態(tài),即“信息菜單”的索引值為 0 ,那么“清除信息”命令無效,否則有效。由于只有先點(diǎn)擊“幫助菜單(MenuHelp)”才能彈出“清除信息菜單(MenuClear)”,所以可以在 MenuHelp 的點(diǎn)擊事件中輸入以下代碼:
Private Sub MenuHelp_Click()
If HintNumber = 0 Then
MenuClear.Enabled = False
Else
MenuClear.Enabled = True
End If
End Sub
7、測試:
按鍵盤上的 F5 鍵,對程序進(jìn)行最終的測試。
三、提醒:
本節(jié)最重要的是掌握諸如 HintNumber 這種輔助變量,它將鼠標(biāo)的點(diǎn)擊動(dòng)作用數(shù)字的形式加以詮釋,通過值的加減來完成菜單的動(dòng)態(tài)增加與清除。
這種輔助變量的使用,在 VB 中幾乎是無處不在的,如前面我們在講 For……Next……的語法時(shí)說的作為累加器的變量。
另外,從上面的例子我們可以看出, Load/Unload 不僅適用于窗體的裝入與卸載,同時(shí)還適用于菜單的裝入與卸載。
------------------------------- · 相關(guān)文檔瀏覽 · --------------------------------------------------------------------- · 熱門文檔瀏覽 · -------------------------------------