二.MainMenu類MenuItem類和ContextMenu類
雖然使用菜單設計器能夠設計出各種菜單但要真正掌握VBNET中的菜單編程還必須了解並靈活使用MainMenu類MenuItem類和ContextMenu類其中MainMenu類和ContextMenu類所起的作用是相似的它們的作用是提供一個菜單項容器裡面可以存放各種菜單項
MainMenu類表示的是下拉菜單的結構裡面存放的菜單項其實就是MenuItem實例在創建完MainMenu實例後必須要把此實例綁定到要顯示此菜單的Form中下拉菜單才能夠顯示而要實現這種綁定其實非常簡單只需把MainMenu實例分配給Form的Menu屬性就可以了
ContextMenu類表示當用戶在控件或窗體的特定區域上單擊鼠標右鍵時彈出的菜單結構可視控件和Form窗體一般都有ContextMenu屬性要顯示ContextMenu實例只需把ContextMenu實例分配給要顯示此彈出菜單的可視組件或Form窗體的ContextMenu 屬性就可以了多個組件可共同使用一個ContextMenu實例
MenuItem類表示的是MainMenu和ContextMenu中的每一個菜單項顯示創建的MenuItem實例必須使用MainMenu或ContextMenu中的Add方法把MenuItem實例加入若要創建子菜單可以使用父MenuItem實例的Add方法把MenuItem實例添加到其MenuItems屬性中
MenuItem類還提供一些屬性用以設定菜單項的外觀和功能若要顯示菜單項旁邊的選中標記可以使用Checked 屬性Shortcut屬性可用於設定此菜單項對應的鍵盤組合鍵
下面就通過下面一個示例來具體了解上面三個類的使用方法
三.使用MainMenu類MenuItem類和ContextMenu類動態創建菜單
下面就利用mainMenu類MenuItem類和ContextMenu類動態創建圖所示的由菜單設計器設計出的菜單其中包括下拉菜單和彈出菜單下面是具體步驟
啟動Visual Studio Net
選擇菜單【文件】|【新建】|【項目】後彈出【新建項目】對話框
將【項目類型】設置為【Visual Basic項目】
將【模板】設置為【Windows應用程序】
在【名稱】文本框中輸入【動態創建菜單】
在【位置】的文本框中輸入【E:\VSNET項目】然後單擊【確定】按鈕這樣在E:\VSNET項目目錄中就產生了名稱為動態創建菜單的文件夾並在裡面創建了名稱為動態創建菜單的項目文件
把Visual Studio Net的當前窗口切換到【Formvb(設計)】窗口並從【工具箱】中的【Windows窗體組件】選項卡中往Form窗體中拖入下列組件並執行相應操作
二個Button組件名稱分別為Button和Button並在這二個組件拖入窗體後分別設定這二個組件的Text屬性值為創建下拉菜單和創建彈出菜單之後再分別雙擊這樣Visual Basic Net會在Formvb中分別產生這二個組件的Click事件對應的處理代碼
把Visual Basic Net的當前窗口切換到Formvb的代碼編輯窗口並用下拉代碼替換Formvb中的Button的Click事件對應的處理代碼下拉代碼的作用是動態創建圖中的下拉菜單
Private Sub Button
_Click ( ByVal sender As System
Object
ByVal e As System
EventArgs ) Handles Button
Click
Dim MainMenu
As MainMenu = New MainMenu ( )
創建一個MainMenu實例
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
myMenuItem
Text =
文件(&F)
myMenuItem
Text =
新建(&N)
myMenuItem
Text =
myMenuItem
Text =
打開(&O)
創建四個MenuItem實例
並進行相應設置
myMenuItem
MenuItems
Add ( myMenuItem
)
myMenuItem
MenuItems
Add ( myMenuItem
)
myMenuItem
MenuItems
Add ( myMenuItem
)
以myMenuItem
是myMenuItem
myMenuItem
和myMenuItem
的父菜單項
MainMenu
MenuItems
Add ( myMenuItem
)
在MainMenu實例中加入MainItem實例
Me
Menu = MainMenu
把MainMenu
指派給Form的的Menu屬性
這樣下拉菜單才能夠顯示
Button
Enabled = False
End Sub
用下列代碼替換Formvb中的Button的Click事件對應的處理代碼下拉代碼的作用是動態創建圖中的彈出菜單
Private Sub Button
_Click ( ByVal sender As System
Object
ByVal e As System
EventArgs ) Handles Button
Click
Dim ContextMenu
As ContextMenu = New ContextMenu ( )
創建一個ContextMenu實例
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
myMenuItem
Text =
拷貝(&C)
myMenuItem
Text =
剪切(&X)
myMenuItem
Text =
粘貼(&V)
創建三個MenuItem實例
並進行相應設置
ContextMenu
MenuItems
Add ( myMenuItem
)
ContextMenu
MenuItems
Add ( myMenuItem
)
ContextMenu
MenuItems
Add ( myMenuItem
)
在ContextMenu
中加入MenuItem
Me
ContextMenu = ContextMenu
把ContextMenu
指派給Form的ContextMenu屬性
顯示彈出菜單
Button
Enabled = False
End Sub
至此【動態創建菜單】項目的全部工作就完成了單擊快捷鍵F運行程序單擊程序中的【創建下拉菜單】按鈕則創建出圖所示的下拉菜單單擊程序中的【創建彈出菜單】則動態創建出圖所示的彈出菜單
如果您要創建的菜單中的菜單項還有子菜單可以根據菜單項中的父子關系把子菜單項加入到父菜單項然後再把父菜單項加入上一級的菜單項或MainMenu和ContextMenu實例中下面代碼作用是創建圖所示的下拉菜單如果是彈出菜單其做法類似
Private Sub Button
_Click ( ByVal sender As System
Object
ByVal e As System
EventArgs ) Handles Button
Click
Dim ContextMenu
As ContextMenu = New ContextMenu ( )
創建一個ContextMenu實例
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
Dim myMenuItem
As MenuItem = New MenuItem ( )
myMenuItem
Text =
拷貝(&C)
myMenuItem
Text =
剪切(&X)
myMenuItem
Text =
粘貼(&V)
創建三個MenuItem實例
並進行相應設置
ContextMenu
MenuItems
Add ( myMenuItem
)
ContextMenu
MenuItems
Add ( myMenuItem
)
ContextMenu
MenuItems
Add ( myMenuItem
)
在ContextMenu
中加入MenuItem
Me
ContextMenu = ContextMenu
把ContextMenu
指派給Form的ContextMenu屬性
顯示彈出菜單
Button
Enabled = False
End Sub
圖動態創建存在子菜單的下拉菜單
四.Net Frame Work SDK 為在VBNet繪制菜單提供的工具
Net Frame Work SDK為Visual Basic Net實現個性化菜單提供了許多工具其中最重要是二個事件及其參數DrawItem事件和其中的DrawItemEventArgs參數MeasureItem事件和其中的MeasureItemEventArgs參數
DrawItem事件和其中的DrawItemEventArgs參數
DrawItem事件是當菜單項的OwnerDraw屬性設置為True並且發出繪制菜單項的請求時才發生個性化菜單制作的處理方法就是在此事件中完成的在DrawItem事件處理程序中將接收一個 DrawItemEventArgs類型的參數它包含與此事件相關的數據這些數據對繪制菜單是很重要的表是DrawItemEventArgs類型參數提供特定於此事件的信息
表DrawItemEventArgs類型參數提供DrawItem事件特定的信息
MeasureItem事件和其中的MeasureItemEventArgs參數
觸發MeasureItem事件必須將菜單項的OwnerDraw屬性設置為True個性化菜單制作可通過此事件來獲取設定菜單項的大小等MeasureItem事件處理程序中接收一個MeasureItemEventArgs類型的參數此參數對獲取設定菜單項的大小是非常重要的表是MeasureItemEventArgs類型參數提供MeasureItem事件的特定信息
表是MeasureItemEventArgs類型參數提供MeasureItem事件的特定信息
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/15453.html