五.繪制個性化菜單
創新互聯建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、網站設計、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的前進網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
先執行以下操作步驟 下列步驟是通過菜單編輯器設計一個簡單的菜單 為后面重新繪制做基礎
啟動Visual Studio Net
選擇菜單【文件】|【新建】|【項目】后 彈出【新建項目】對話框
將【項目類型】設置為【Visual Basic項目】
將【模板】設置為【Windows應用程序】
在【名稱】文本框中輸入【自己畫菜單】
在【位置】的文本框中輸入【E:\VS NET項目】 然后單擊【確定】按鈕 這樣在 E:\VS NET項目 目錄中就產生了名稱為 自己畫菜單 的文件夾 并在里面創建了名稱為 自己畫菜單 的項目文件
把Visual Studio Net的當前窗口切換到【Form vb(設計)】窗口 并從【工具箱】中的【Windows窗體組件】選項卡中往Form 窗體中拖入下列組件
一個MainMenu組件 名稱為 MainMenu
選中 MainMenu 組件 單擊鼠標右鍵 在彈出的菜單中選擇 編輯菜單 并按照圖 所示界面設計菜單
圖 【自己畫菜單】項目設計界面之一
此時保存上述步驟 并單擊快捷鍵F 則得到圖 所示界面
圖 【自己畫菜單】運行界面之一
這樣通過菜單編輯器就完成了一個非常普通的菜單 下面就對此菜單進行改造 在改造之前 要先設定項目中的三個MenuItem類實例的OwnerDraw屬性值為 True 因為只有此屬性值為 True 才會觸發繪制菜單時所需要的DrawItem事件和MeasureItem事件 之后再在上面項目的基礎上執行下一步操作
把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 ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數是有區別的 e Graphics FillRectangle(New SolidBrush(Color LightGreen) rfBound) 以LightGreen色彩填充MenuItem 菜單項對應的矩形區域 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 ) 以中間對齊方式 指定字體 大小 在指定的矩形區域重畫菜單 If e State = ( DrawItemState NoAccelerator Or DrawItemState Selected ) Then 根據菜單項的當前繪制狀態來繪制菜單項 e Graphics FillRectangle ( New SolidBrush ( Color LightYellow ) rfBound ) 對菜單項所在的矩形區域進行色彩填充 e Graphics DrawString ( s New Font ( 宋體 FontStyle Bold ) New SolidBrush ( Color Black ) rfBound sfTemp ) 對菜單項名稱繪制 End If e DrawFocusRectangle ( ) 在 DrawItemEventArgs參數得到矩形范圍內繪制聚焦框 e Graphics DrawRectangle ( New Pen ( New SolidBrush ( Color Black ) ) rfBound ) 對菜單項的矩形區域繪制矩形框End Sub
操作完成后 保存修改 此時再單擊快捷鍵F 運行程序 可得到如圖 所示的界面
圖 【自己畫菜單】運行界面之二
可見繪制的 文件 菜單項并沒有完全顯示出來 并且后面的菜單項也沒有顯示 這是因為菜單項的顯示區域并沒有設定 而缺省的空間又不能完全顯示造成的 設定菜單項的顯示區域大小是通過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 運行程序可得到圖 所示界面
圖 【自己畫菜單】運行界面之三
可見 文件 菜單項就算繪制出來了 由于其他菜單項沒有繪制處理 所以也未顯示 其他菜單項的繪制方法和 文件 菜單項的繪制方法基本相似 以下是在上述完成的基礎上 對其他菜單項進行繪制 從而得到圖 所示菜單的具體實現步驟
圖 【自己畫菜單】運行界面之四
在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 ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中 Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數是有區別的 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 設定文本在矩形區域的對齊方式 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事件 在此事件中實現設定 新建 菜單項的長度和高度
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 ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中Dim rfBound As Rectangle = New Rectangle ( e Bounds X e Bounds Y e Bounds Width e Bounds Height ) 根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中 Rectangle類型實例和RectangleF類型實例差不多 但在后面代碼中繪制菜單的函數是有區別的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事件 在此事件中實現設定 新建 菜單項的長度和高度
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 運行 程序就可以得到圖 所示的運行界面
六.總結
本文主要內容是介紹VB NET設計和創建菜單 其中不僅介紹了使用菜單設計器來靜態設計菜單 還介紹了使用MainMenu類 MenuItem類和ContextMenu類動態創建菜單的實現方法 在動態創建時 首先要了解要創建的菜單類型 是下拉菜單 首先要創建一個MainMenu實例 是彈出菜單 首先要創建一個ContextMenu實例 然后根據菜單中的組成結構 即菜單項中的父子關系 創建出相應菜單 最后就是顯示出菜單 如果是下拉菜單 指派給Form的Menu屬性 如果是彈出菜單 指派給可視組件或Form的ContextMenu屬性 這樣動態創建菜單才能夠顯示出來 動態創建菜單的工作才算完成
此外還介紹了在Visual Basic Net中繪制個性化菜單的實現方法和注意事項 在繪制個性化菜單時最重要的是掌握DrawItem事件和MeasureItem事件用法 及繪制菜單時所要使用到的方法 雖然本文繪制的菜單并不美觀 但你可以通過本文介紹的方法來修改 從而實現更美觀 更有個性的菜單 最后請記住 在繪制菜單時 首先把菜單項的 OwnerDraw 屬性設定為 True
lishixinzhi/Article/program/net/201311/15454
VB 6.0 :菜單編輯器的用法
做VB 項目時經常需要用菜單編輯器來創建自己需要的菜單,因此需要對其具體用法非常嫻熟。下面把從網上下載過來的資料結合自己使用的體會整理出一份文檔以供日后參考。
附加以下圖片以幫助說明與理解。
圖片:菜單編輯器的使用
在出現VB6.0窗體的情況下,在菜單中選“工具”,再在其下拉菜單下選“菜單編輯器”。然后按如下說明操作:
一. “菜單編輯器”對話框 。
使用菜單編輯器可以為應用程序創建自定義菜單并定義其屬性。
二. 對話框選項。
1. “標題” :使用該選項可以輸入菜單名或命令名,這些名字出現在菜單條或菜單之
中。 如果想在菜單中建立分隔符條,則應在Caption 框中鍵入一個連字符 (-)。為了能夠通過鍵盤訪問菜單項,可在一個字母前插入 符號。在運行時,該字母帶有下劃線( 符號是不可見的),按 ALT 鍵和該字母就可訪問菜單或命令。如果要在菜單中顯示 符號,則應在標題中連續輸入兩個 符號。
2. “名稱” :用來為菜單項輸入控件名。控件名是標識符,僅用于訪問代碼中的菜單項;它不會出現在菜單中。
3. “索引” :可指定一個數字值來確定控件在控件數組中的位置。該位置與控件的屏
幕位置無關。
4. “快捷鍵” :可在列表框中為每個命令選擇快捷鍵。
5. “幫助上下文 ID” 。允許為 context ID 指定唯一數值。在 HelpFile 屬性指定的幫助文件中用該數值查找適當的幫助主題。
6. “協調位置” :該列表框中共有四個可選項,他們決定是否及如何在容器窗體中顯
示菜單。
7. “復選” :允許在菜單項的左邊設置復選標記。通常用它來指出切換選項的開關狀
態。
8. “有效” :由此選項可決定是否讓菜單項對事件做出響應,而如果希望該項失效并
以淺灰色顯示出來,則也可取消對該復選框的選用。
9. “可見”:決定是否將菜單項顯示在菜單上。
10. “顯示窗口列表” :在 MDI 應用程序中,確定菜單控件是否包含一個打開的 MDI
子窗體列表。
11. “右箭頭” :每次單擊都把選定的菜單向右移一個等級。一共可以創建四個子菜單
等級。
12. “左箭頭” :每次單擊都把選定的菜單向上移一個等級。一共可以創建四個子菜單
等級。
13. “上箭頭” :每次單擊都把選定的菜單項在同級菜單內向上移動一個位置。
14. “下箭頭” :“下箭頭” 。每次單擊都把選定的菜單項在同級菜單內向下移動一個位置。
15. “菜單列表” :該列表框顯示菜單項的分級列表。將子菜單項縮進以指出它們的分
級位置或等級。
16. “下一個” :將選定項移動到下一行,往往是為建立下一個菜單項準備。
17. “插入” :在列表框的當前選定行上方插入一行。
18. “刪除” :刪除當前選定行。
19. “確定” :關閉菜單編輯器,并對選定的最后一個窗體進行修改。菜單可以在設計
時使用,但在設計時可以通過選定一個菜單,來打開菜單單擊事件的“代碼”窗口,而不是執行事件代碼。
20. “取消” :關閉菜單編輯器,取消所有修改。
2010-4-24 從網上下載并整理
你好,如果你在VB.NET中遇到菜單框顯示不一致的問題,可以嘗試以下解決方法:
1.檢查菜單項的屬性:打開菜單設計器,在屬性面板中檢查每個菜單項的屬性,確保它們都設置為相同的值。
2.檢查控件的樣式:在控件屬性中檢查樣式屬性,如果設置了不同的樣式可能會導致菜單框的顯示不一致。
3.更新.NET框架版本:如果以上方法都不能解決問題,可能是因為使用的.NET框架版本太舊而導致。可以嘗試更新.NET框架版本。
希望以上方法能夠解決你的問題。你好,如果你在VB.NET中遇到菜單框顯示不一致的問題,可以嘗試以下解決方法:
1.檢查菜單項的屬性:打開菜單設計器,在屬性面板中檢查每個菜單項的屬性,確保它們都設置為相同的值。
2.檢查控件的樣式:在控件屬性中檢查樣式屬性,如果設置了不同的樣式可能會導致菜單框的顯示不一致。
3.更新.NET框架版本:如果以上方法都不能解決問題,可能是因為使用的.NET框架版本太舊而導致。可以嘗試更新.NET框架版本。
希望以上方法能夠解決你的問題。
網站標題:vb點虐
菜單設計器 菜單編輯器vb
文章起源:http://vcdvsql.cn/article26/ddgoocg.html
成都網站建設公司_創新互聯,為您提供小程序開發、網站設計、響應式網站、網站收錄、品牌網站制作、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯