結合上一節(jié)介紹的方法 通過Visual Basic Net的菜單設計器 按照圖 和圖 所示的菜單結構設計菜單 圖 【MDI編程】項目的菜單結構之一 圖 【MDI編程】項目的菜單結構之二 在利用菜單設計器設計完菜單后 分別在窗體中雙擊 新建 退出 層疊顯示 橫行平鋪 縱向平鋪 和 排列圖標 菜單項 這樣Visual Basic Net會在Form vb文件中分別產(chǎn)生這些菜單項的Click事件對應的處理代碼 設定Form 的 IsMdiContainer 屬性值為 True 這把Form 窗體定義為MDI窗體容器 這一步設置是后面編程的基礎 當設置此屬性值后 Form 的窗體也發(fā)生了改變 圖 是設置此屬性后的窗體模樣 圖 把Form 窗體設置為MDI窗體容器后的模樣 選中圖 中的 窗口 菜單項 并設置此菜單項的 MdiList 屬性值為 True 其作用是當程序運行后 如果新建了一個MDI窗體 就會在 窗口 菜單項后 自動加入一個以新建MDI窗體名稱命名的菜單項 如果新建了多個MDI窗體 則會在 窗口 菜單項后 會加入以這些MDI窗體名稱命名的菜單項 當MDI窗體被關閉 那些以此MDI窗體命名的菜單項也會自動刪除 具體可圖 所示 把Visua Basic Net的當前窗口切換到Form vb的代碼編輯窗口 并在定義Form 中組件的代碼區(qū)加入下列代碼 下列代碼是定義一個變量 此變量用以統(tǒng)計程序中新建MDI窗體的數(shù)量 Private iFormCount As Integer = 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 新建 菜單項 下列代碼的作用是在新建一個MDI窗體 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickDim frmTemp As Form = New Form ( ) 新建一個窗體frmTemp MdiParent = Me 為當前創(chuàng)建的窗體設置MDI父窗體frmTemp Text = MDI窗體 + iFormCount ToString ( )iFormCount = iFormCount + frmTemp Show ( ) 把此MDI窗體顯示出來End Sub 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 退出 菜單項 下列代碼的作用是退出應用程序 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickApplication Exit ( ) 退出應用程序End Sub 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 層疊顯示 菜單項 下列代碼的作用是層疊排列窗體中的所有MDI窗體 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout Cascade ) 層疊排列窗體中的所有MDI窗體End Sub 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 水平平鋪 菜單項 下列代碼的作用是水平平鋪窗體中的所有MDI窗體 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout TileHorizontal ) 水平平鋪窗體中的所有MDI窗體End Sub 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 垂直平鋪 菜單項 下列代碼的作用是垂直平鋪窗體中的所有MDI窗體 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout TileVertical ) 垂直平鋪窗體中的所有MDI窗體End Sub 用下列代碼替換Form vb中的MenuItem 的Click事件對應的處理代碼 MenuItem 即為圖 中的 排列圖標 菜單項 下列代碼的作用是窗體中的所有MDI窗體排列圖標 Private Sub MenuItem _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles MenuItem ClickMe LayoutMdi ( MdiLayout ArrangeIcons ) 窗體中的所有MDI窗體排列圖標End Sub至此【MDI編程】項目的全部工作就完成了 圖 圖 和圖 是程序運行后的界面 圖 【MDI編程】運行界面之一 圖 【MDI編程】運行界面之二 圖 【MDI編程】運行界面之三 此時我們注意到圖 所示的 窗口 菜單中增加許多子菜單 而在程序設計時 并沒有處理這些功能的代碼 這是由于第十一步中設置 窗口 菜單項的 MdiList 屬性值為 True 造成的 可見正確的設置組件的屬性值有時的確能夠代替煩雜的代碼編寫工作 五 總結 本文主要內(nèi)容有二個 其一是介紹的在Visual Basic Net定制不規(guī)則窗體的實現(xiàn)方法 在Visual Basic Net中創(chuàng)建不規(guī)則窗體主要使用的是Region類和GraphicsPath類 GraphicsPath主要是繪制窗體的形狀 Region主要是以GraphicsPath來構建窗體 結合本文的實現(xiàn)思路和具體方法 我想對于其他形狀的窗體 在掌握GraphicsPath類提供的使用方法的前提下 加上對所要創(chuàng)建不規(guī)則窗體的規(guī)劃設計 用Visual Basic Net實現(xiàn)起來應該不算很困難 本文的另外一個主要內(nèi)容就是介紹在Visual Basic Net編寫MDI應用程序的基本過程 技巧和注意事項 通過本文的介紹可見Visual Basic Net的MDI編程并沒有什么復雜的地方 只需了解一些對MDI窗體處理的方法及其調(diào)用方式 當然更重要的是要了解并掌握某些組件的針對MDI的屬性及其設置方式 lishixinzhi/Article/program/net/201311/11698
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比成縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式成縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋成縣地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
五.繪制個性化菜單
先執(zhí)行以下操作步驟 下列步驟是通過菜單編輯器設計一個簡單的菜單 為后面重新繪制做基礎
啟動Visual Studio Net
選擇菜單【文件】|【新建】|【項目】后 彈出【新建項目】對話框
將【項目類型】設置為【Visual Basic項目】
將【模板】設置為【W(wǎng)indows應用程序】
在【名稱】文本框中輸入【自己畫菜單】
在【位置】的文本框中輸入【E:\VS NET項目】 然后單擊【確定】按鈕 這樣在 E:\VS NET項目 目錄中就產(chǎn)生了名稱為 自己畫菜單 的文件夾 并在里面創(chuàng)建了名稱為 自己畫菜單 的項目文件
把Visual Studio Net的當前窗口切換到【Form vb(設計)】窗口 并從【工具箱】中的【W(wǎng)indows窗體組件】選項卡中往Form 窗體中拖入下列組件
一個MainMenu組件 名稱為 MainMenu
選中 MainMenu 組件 單擊鼠標右鍵 在彈出的菜單中選擇 編輯菜單 并按照圖 所示界面設計菜單
圖 【自己畫菜單】項目設計界面之一
此時保存上述步驟 并單擊快捷鍵F 則得到圖 所示界面
圖 【自己畫菜單】運行界面之一
這樣通過菜單編輯器就完成了一個非常普通的菜單 下面就對此菜單進行改造 在改造之前 要先設定項目中的三個MenuItem類實例的OwnerDraw屬性值為 True 因為只有此屬性值為 True 才會觸發(fā)繪制菜單時所需要的DrawItem事件和MeasureItem事件 之后再在上面項目的基礎上執(zhí)行下一步操作
把Visual Stuido Net的當前窗口切換到Form vb的代碼編輯窗口 并在InitializeComponent過程之后添加下列代碼 下列代碼是繪制 文件 菜單項 其作用是改變 文件 菜單項的字體 大小和菜單項的 其具體的繪制方法請參考下列代碼中的注釋
Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItem Dim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到RectangleF類型實例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數(shù)是有區(qū)別的 e Graphics FillRectangle(New SolidBrush(Color LightGreen) rfBound) 以LightGreen色彩填充MenuItem 菜單項對應的矩形區(qū)域 Dim s As MenuItem = CType ( sender MenuItem ) Dim s As String = s Text 獲得MenuItem 菜單項的名稱 Dim sfTemp As StringFormat = New StringFormat ( ) sfTemp Alignment = StringAlignment Center 設定要畫的菜單名稱的對齊方式 中間對齊 e Graphics DrawString ( s New Font ( 宋體 FontStyle Bold ) New SolidBrush ( Color Black ) rfBound sfTemp ) 以中間對齊方式 指定字體 大小 在指定的矩形區(qū)域重畫菜單 If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then 根據(jù)菜單項的當前繪制狀態(tài)來繪制菜單項 e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound ) 對菜單項所在的矩形區(qū)域進行色彩填充 e Graphics DrawString ( s New Font ( 宋體 FontStyle Bold ) New SolidBrush ( Color Black ) rfBound sfTemp ) 對菜單項名稱繪制 End If e DrawFocusRectangle ( ) 在 DrawItemEventArgs參數(shù)得到矩形范圍內(nèi)繪制聚焦框 e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound ) 對菜單項的矩形區(qū)域繪制矩形框End Sub
操作完成后 保存修改 此時再單擊快捷鍵F 運行程序 可得到如圖 所示的界面
圖 【自己畫菜單】運行界面之二
可見繪制的 文件 菜單項并沒有完全顯示出來 并且后面的菜單項也沒有顯示 這是因為菜單項的顯示區(qū)域并沒有設定 而缺省的空間又不能完全顯示造成的 設定菜單項的顯示區(qū)域大小是通過MeasureItem事件來完成的 具體操作是在MenuItem 的DrawItem事件后添加下列代碼 下列代碼是是定義MenuItem 的MeasureItem事件 在此事件中設定菜單項的寬度(當然也可以設定高度等)
Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth = 設定菜單項的寬度End Sub
保存上述修改后 單擊快捷鍵F 運行程序可得到圖 所示界面
圖 【自己畫菜單】運行界面之三
可見 文件 菜單項就算繪制出來了 由于其他菜單項沒有繪制處理 所以也未顯示 其他菜單項的繪制方法和 文件 菜單項的繪制方法基本相似 以下是在上述完成的基礎上 對其他菜單項進行繪制 從而得到圖 所示菜單的具體實現(xiàn)步驟
圖 【自己畫菜單】運行界面之四
在Form vb中的MenuItem 的MeasureItem事件處理程序之后添加下列代碼 下列代碼是定義MenuItem 的DrawItem事件 其功能是對 新建 菜單項重新繪制
Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItem Dim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到RectangleF類型實例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數(shù)是有區(qū)別的 e Graphics FillRectangle ( New SolidBrush ( Color LightGray ) rfBound ) Dim s As MenuItem = CType ( sender MenuItem ) Dim s As String = s Text 獲得菜單項對應的文本名稱 Dim sfTemp As StringFormat = New StringFormat ( ) sfTemp Alignment = StringAlignment Center 設定文本在矩形區(qū)域的對齊方式 sfTemp LineAlignment = StringAlignment Center Dim rcText As RectangleF = rfBound rcText Width = e Graphics DrawString ( s New Font ( 宋體 ) New SolidBrush ( Color Blue ) rcText sfTemp ) e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color LightGray ) ) rfBound ) If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Thene Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound ) e Graphics DrawString ( s New Font ( 宋體 FontStyle Bold Or FontStyle Underline ) New SolidBrush ( Color Red ) rcText sfTemp ) e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound ) e DrawFocusRectangle ( ) End IfEnd Sub
MenuItem 的DrawItem事件處理代碼之后添加下列代碼 下列代碼是定義MenuItem 的MeasureItem事件 在此事件中實現(xiàn)設定 新建 菜單項的長度和高度
Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth = 設定菜單項的寬度 e ItemHeight = 設定菜單項的高度End Sub
在完成上述操作步驟后 再在MenuItem 的MeasureItem事件處理程序之后添加下列代碼 下列代碼是定義MenuItem 的DrawItem事件 其功能是對 打開 菜單項重新繪制
Private Sub MenuItem _DrawItem ( ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs ) Handles MenuItem DrawItemDim rfBound As RectangleF = New RectangleF ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到RectangleF類型實例中Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據(jù)DrawItemEventArgs參數(shù)獲得菜單項矩形區(qū)域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數(shù)是有區(qū)別的Dim s As MenuItem = CType ( sender MenuItem ) Dim s As String = s TextDim sfTemp As StringFormat = New StringFormat ( ) sfTemp Alignment = StringAlignment CentersfTemp LineAlignment = StringAlignment CenterDim rcText As RectangleF = rfBoundrcText Width = e Graphics DrawString ( s New Font ( Veranda ) New SolidBrush ( Color Blue ) rcText sfTemp ) e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color LightGray ) ) rfBound ) If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound ) e Graphics DrawString ( s New Font ( Veranda FontStyle Bold Or FontStyle Underline ) New SolidBrush ( Color Red ) rcText sfTemp ) e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound ) e DrawFocusRectangle ( ) End IfEnd Sub
MenuItem 的DrawItem事件處理代碼之后添加下列代碼 下列代碼是定義MenuItem 的MeasureItem事件 在此事件中實現(xiàn)設定 新建 菜單項的長度和高度
Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth = 設定菜單項的寬度 e ItemHeight = 設定菜單項的高度End Sub
在上述步驟都正確完成后 本文介紹的手工繪制菜單就完成 此時單擊快捷鍵F 運行 程序就可以得到圖 所示的運行界面
六.總結
本文主要內(nèi)容是介紹VB NET設計和創(chuàng)建菜單 其中不僅介紹了使用菜單設計器來靜態(tài)設計菜單 還介紹了使用MainMenu類 MenuItem類和ContextMenu類動態(tài)創(chuàng)建菜單的實現(xiàn)方法 在動態(tài)創(chuàng)建時 首先要了解要創(chuàng)建的菜單類型 是下拉菜單 首先要創(chuàng)建一個MainMenu實例 是彈出菜單 首先要創(chuàng)建一個ContextMenu實例 然后根據(jù)菜單中的組成結構 即菜單項中的父子關系 創(chuàng)建出相應菜單 最后就是顯示出菜單 如果是下拉菜單 指派給Form的Menu屬性 如果是彈出菜單 指派給可視組件或Form的ContextMenu屬性 這樣動態(tài)創(chuàng)建菜單才能夠顯示出來 動態(tài)創(chuàng)建菜單的工作才算完成
此外還介紹了在Visual Basic Net中繪制個性化菜單的實現(xiàn)方法和注意事項 在繪制個性化菜單時最重要的是掌握DrawItem事件和MeasureItem事件用法 及繪制菜單時所要使用到的方法 雖然本文繪制的菜單并不美觀 但你可以通過本文介紹的方法來修改 從而實現(xiàn)更美觀 更有個性的菜單 最后請記住 在繪制菜單時 首先把菜單項的 OwnerDraw 屬性設定為 True
lishixinzhi/Article/program/net/201311/15454
二.MainMenu類 MenuItem類和ContextMenu類
雖然使用菜單設計器能夠設計出各種菜單 但要真正掌握VB NET中的菜單編程 還必須了解并靈活使用MainMenu類 MenuItem類和ContextMenu類 其中MainMenu類和ContextMenu類所起的作用是相似的 它們的作用是提供一個菜單項容器 里面可以存放各種菜單項
MainMenu類表示的是下拉菜單的結構 里面存放的菜單項其實就是MenuItem實例 在創(chuàng)建完MainMenu實例后 必須要把此實例綁定到要顯示此菜單的Form中 下拉菜單才能夠顯示 而要實現(xiàn)這種綁定其實非常簡單 只需把MainMenu實例分配給Form的Menu屬性就可以了
ContextMenu類表示當用戶在控件或窗體的特定區(qū)域上單擊鼠標右鍵時彈出的菜單結構 可視控件和Form窗體一般都有ContextMenu屬性 要顯示ContextMenu實例 只需把ContextMenu實例分配給要顯示此彈出菜單的可視組件或Form窗體的ContextMenu 屬性就可以了 多個組件可共同使用一個ContextMenu實例 MenuItem類表示的是MainMenu和ContextMenu中的每一個菜單項 顯示創(chuàng)建的MenuItem實例 必須使用MainMenu或ContextMenu中的 Add 方法把MenuItem實例加入 若要創(chuàng)建子菜單 可以使用父MenuItem實例的 Add 方法把MenuItem實例添加到其MenuItems屬性中
MenuItem類還提供一些屬性用以設定菜單項的外觀和功能 若要顯示菜單項旁邊的選中標記 可以使用Checked 屬性 Shortcut屬性可用于設定此菜單項對應的鍵盤組合鍵
下面就通過下面一個示例來具體了解上面三個類的使用方法 三.使用MainMenu類 MenuItem類和ContextMenu類動態(tài)創(chuàng)建菜單
下面就利用mainMenu類 MenuItem類和ContextMenu類動態(tài)創(chuàng)建圖 所示的由菜單設計器設計出的菜單 其中包括下拉菜單和彈出菜單 下面是具體步驟
啟動Visual Studio Net
選擇菜單【文件】|【新建】|【項目】后 彈出【新建項目】對話框
將【項目類型】設置為【Visual Basic項目】
將【模板】設置為【W(wǎng)indows應用程序】
在【名稱】文本框中輸入【動態(tài)創(chuàng)建菜單】
在【位置】的文本框中輸入【E:\VS NET項目】 然后單擊【確定】按鈕 這樣在 E:\VS NET項目 目錄中就產(chǎn)生了名稱為 動態(tài)創(chuàng)建菜單 的文件夾 并在里面創(chuàng)建了名稱為 動態(tài)創(chuàng)建菜單 的項目文件
把Visual Studio Net的當前窗口切換到【Form vb(設計)】窗口 并從【工具箱】中的【W(wǎng)indows窗體組件】選項卡中往Form 窗體中拖入下列組件 并執(zhí)行相應操作
二個Button組件 名稱分別為Button 和Button 并在這二個組件拖入窗體后 分別設定這二個組件的 Text 屬性值為 創(chuàng)建下拉菜單 和 創(chuàng)建彈出菜單 之后再分別雙擊 這樣Visual Basic Net會在Form vb中分別產(chǎn)生這二個組件的Click事件對應的處理代碼
把Visual Basic Net的當前窗口切換到Form vb的代碼編輯窗口 并用下拉代碼替換Form vb中的Button 的Click事件對應的處理代碼 下拉代碼的作用是動態(tài)創(chuàng)建圖 中的下拉菜單
Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim MainMenu As MainMenu = New MainMenu ( ) 創(chuàng)建一個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) 創(chuàng)建四個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 = FalseEnd Sub
用下列代碼替換Form vb中的Button 的Click事件對應的處理代碼 下拉代碼的作用是動態(tài)創(chuàng)建圖 中的彈出菜單
Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim ContextMenu As ContextMenu = New ContextMenu ( ) 創(chuàng)建一個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) 創(chuàng)建三個MenuItem實例 并進行相應設置 ContextMenu MenuItems Add ( myMenuItem ) ContextMenu MenuItems Add ( myMenuItem ) ContextMenu MenuItems Add ( myMenuItem ) 在ContextMenu 中加入MenuItem Me ContextMenu = ContextMenu 把ContextMenu 指派給Form的ContextMenu屬性 顯示彈出菜單 Button Enabled = FalseEnd Sub
至此【動態(tài)創(chuàng)建菜單】項目的全部工作就完成了 單擊快捷鍵 F 運行程序 單擊程序中的【創(chuàng)建下拉菜單】按鈕 則創(chuàng)建出圖 所示的下拉菜單 單擊程序中的【創(chuàng)建彈出菜單】 則動態(tài)創(chuàng)建出圖 所示的彈出菜單
如果您要創(chuàng)建的菜單中的菜單項還有子菜單 可以根據(jù)菜單項中的父子關系 把子菜單項加入到父菜單項 然后再把父菜單項加入上一級的菜單項或MainMenu和ContextMenu實例中 下面代碼作用是創(chuàng)建圖 所示的下拉菜單 如果是彈出菜單 其做法類似
Private Sub Button _Click ( ByVal sender As System Object ByVal e As System EventArgs ) Handles Button Click Dim ContextMenu As ContextMenu = New ContextMenu ( ) 創(chuàng)建一個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) 創(chuàng)建三個MenuItem實例 并進行相應設置 ContextMenu MenuItems Add ( myMenuItem ) ContextMenu MenuItems Add ( myMenuItem ) ContextMenu MenuItems Add ( myMenuItem ) 在ContextMenu 中加入MenuItem Me ContextMenu = ContextMenu 把ContextMenu 指派給Form的ContextMenu屬性 顯示彈出菜單 Button Enabled = FalseEnd Sub
圖 動態(tài)創(chuàng)建存在子菜單的下拉菜單
四. Net Frame Work SDK 為在VB Net繪制菜單提供的工具
Net Frame Work SDK為Visual Basic Net實現(xiàn)個性化菜單提供了許多工具 其中最重要是二個事件及其參數(shù) DrawItem事件和其中的DrawItemEventArgs參數(shù) MeasureItem事件和其中的MeasureItemEventArgs參數(shù)
DrawItem事件和其中的DrawItemEventArgs參數(shù)
DrawItem事件是當菜單項的OwnerDraw屬性設置為True并且發(fā)出繪制菜單項的請求時才發(fā)生 個性化菜單制作的處理方法就是在此事件中完成的 在DrawItem事件處理程序中將接收一個 DrawItemEventArgs類型的參數(shù) 它包含與此事件相關的數(shù)據(jù) 這些數(shù)據(jù)對繪制菜單是很重要的 表 是DrawItemEventArgs類型參數(shù)提供特定于此事件的信息
表 DrawItemEventArgs類型參數(shù)提供DrawItem事件特定的信息
MeasureItem事件和其中的MeasureItemEventArgs參數(shù)
觸發(fā)MeasureItem事件必須將菜單項的OwnerDraw屬性設置為True 個性化菜單制作可通過此事件來獲取 設定菜單項的大小等 MeasureItem事件處理程序中接收一個MeasureItemEventArgs類型的參數(shù) 此參數(shù)對獲取 設定菜單項的大小是非常重要的 表 是MeasureItemEventArgs類型參數(shù)提供MeasureItem事件的特定信息
表 是MeasureItemEventArgs類型參數(shù)提供MeasureItem事件的特定信息
lishixinzhi/Article/program/net/201311/15453