vb點虐 菜單設(shè)計器 菜單編輯器vb

VB.NET菜單設(shè)計初級入門[3]

五.繪制個性化菜單

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的前進網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

先執(zhí)行以下操作步驟 下列步驟是通過菜單編輯器設(shè)計一個簡單的菜單 為后面重新繪制做基礎(chǔ)

啟動Visual Studio Net

選擇菜單【文件】|【新建】|【項目】后 彈出【新建項目】對話框

將【項目類型】設(shè)置為【Visual Basic項目】

將【模板】設(shè)置為【W(wǎng)indows應(yīng)用程序】

在【名稱】文本框中輸入【自己畫菜單】

在【位置】的文本框中輸入【E:\VS NET項目】 然后單擊【確定】按鈕 這樣在 E:\VS NET項目 目錄中就產(chǎn)生了名稱為 自己畫菜單 的文件夾 并在里面創(chuàng)建了名稱為 自己畫菜單 的項目文件

把Visual Studio Net的當(dāng)前窗口切換到【Form vb(設(shè)計)】窗口 并從【工具箱】中的【W(wǎng)indows窗體組件】選項卡中往Form 窗體中拖入下列組件

一個MainMenu組件 名稱為 MainMenu

選中 MainMenu 組件 單擊鼠標(biāo)右鍵 在彈出的菜單中選擇 編輯菜單 并按照圖 所示界面設(shè)計菜單

圖 【自己畫菜單】項目設(shè)計界面之一

此時保存上述步驟 并單擊快捷鍵F 則得到圖 所示界面

圖 【自己畫菜單】運行界面之一

這樣通過菜單編輯器就完成了一個非常普通的菜單 下面就對此菜單進行改造 在改造之前 要先設(shè)定項目中的三個MenuItem類實例的OwnerDraw屬性值為 True 因為只有此屬性值為 True 才會觸發(fā)繪制菜單時所需要的DrawItem事件和MeasureItem事件 之后再在上面項目的基礎(chǔ)上執(zhí)行下一步操作

把Visual Stuido Net的當(dāng)前窗口切換到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 菜單項對應(yīng)的矩形區(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  設(shè)定要畫的菜單名稱的對齊方式 中間對齊 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ù)菜單項的當(dāng)前繪制狀態(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ū)域并沒有設(shè)定 而缺省的空間又不能完全顯示造成的 設(shè)定菜單項的顯示區(qū)域大小是通過MeasureItem事件來完成的 具體操作是在MenuItem 的DrawItem事件后添加下列代碼 下列代碼是是定義MenuItem 的MeasureItem事件 在此事件中設(shè)定菜單項的寬度(當(dāng)然也可以設(shè)定高度等)

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   設(shè)定菜單項的寬度End Sub

保存上述修改后 單擊快捷鍵F 運行程序可得到圖 所示界面

圖 【自己畫菜單】運行界面之三

可見 文件 菜單項就算繪制出來了 由于其他菜單項沒有繪制處理 所以也未顯示 其他菜單項的繪制方法和 文件 菜單項的繪制方法基本相似 以下是在上述完成的基礎(chǔ)上 對其他菜單項進行繪制 從而得到圖 所示菜單的具體實現(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  獲得菜單項對應(yīng)的文本名稱 Dim sfTemp As StringFormat = New StringFormat ( )  sfTemp Alignment = StringAlignment Center  設(shè)定文本在矩形區(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)設(shè)定 新建 菜單項的長度和高度

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   設(shè)定菜單項的寬度 e ItemHeight =   設(shè)定菜單項的高度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)設(shè)定 新建 菜單項的長度和高度

Private Sub MenuItem _MeasureItem ( ByVal sender As Object ByVal e As System Windows Forms MeasureItemEventArgs ) Handles MenuItem MeasureItem e ItemWidth =   設(shè)定菜單項的寬度 e ItemHeight =   設(shè)定菜單項的高度End Sub

在上述步驟都正確完成后 本文介紹的手工繪制菜單就完成 此時單擊快捷鍵F 運行 程序就可以得到圖 所示的運行界面

六.總結(jié)

本文主要內(nèi)容是介紹VB NET設(shè)計和創(chuàng)建菜單 其中不僅介紹了使用菜單設(shè)計器來靜態(tài)設(shè)計菜單 還介紹了使用MainMenu類 MenuItem類和ContextMenu類動態(tài)創(chuàng)建菜單的實現(xiàn)方法 在動態(tài)創(chuàng)建時 首先要了解要創(chuàng)建的菜單類型 是下拉菜單 首先要創(chuàng)建一個MainMenu實例 是彈出菜單 首先要創(chuàng)建一個ContextMenu實例 然后根據(jù)菜單中的組成結(jié)構(gòu) 即菜單項中的父子關(guān)系 創(chuàng)建出相應(yīng)菜單 最后就是顯示出菜單 如果是下拉菜單 指派給Form的Menu屬性 如果是彈出菜單 指派給可視組件或Form的ContextMenu屬性 這樣動態(tài)創(chuàng)建菜單才能夠顯示出來 動態(tài)創(chuàng)建菜單的工作才算完成

此外還介紹了在Visual Basic Net中繪制個性化菜單的實現(xiàn)方法和注意事項 在繪制個性化菜單時最重要的是掌握DrawItem事件和MeasureItem事件用法 及繪制菜單時所要使用到的方法 雖然本文繪制的菜單并不美觀 但你可以通過本文介紹的方法來修改 從而實現(xiàn)更美觀 更有個性的菜單 最后請記住 在繪制菜單時 首先把菜單項的 OwnerDraw 屬性設(shè)定為 True

lishixinzhi/Article/program/net/201311/15454

vb中的菜單編輯器在哪

VB 6.0 :菜單編輯器的用法

做VB 項目時經(jīng)常需要用菜單編輯器來創(chuàng)建自己需要的菜單,因此需要對其具體用法非常嫻熟。下面把從網(wǎng)上下載過來的資料結(jié)合自己使用的體會整理出一份文檔以供日后參考。

附加以下圖片以幫助說明與理解。

圖片:菜單編輯器的使用

在出現(xiàn)VB6.0窗體的情況下,在菜單中選“工具”,再在其下拉菜單下選“菜單編輯器”。然后按如下說明操作:

一. “菜單編輯器”對話框 。

使用菜單編輯器可以為應(yīng)用程序創(chuàng)建自定義菜單并定義其屬性。

二. 對話框選項。

1. “標(biāo)題” :使用該選項可以輸入菜單名或命令名,這些名字出現(xiàn)在菜單條或菜單之

中。 如果想在菜單中建立分隔符條,則應(yīng)在Caption 框中鍵入一個連字符 (-)。為了能夠通過鍵盤訪問菜單項,可在一個字母前插入 符號。在運行時,該字母帶有下劃線( 符號是不可見的),按 ALT 鍵和該字母就可訪問菜單或命令。如果要在菜單中顯示 符號,則應(yīng)在標(biāo)題中連續(xù)輸入兩個 符號。

2. “名稱” :用來為菜單項輸入控件名??丶菢?biāo)識符,僅用于訪問代碼中的菜單項;它不會出現(xiàn)在菜單中。

3. “索引” :可指定一個數(shù)字值來確定控件在控件數(shù)組中的位置。該位置與控件的屏

幕位置無關(guān)。

4. “快捷鍵” :可在列表框中為每個命令選擇快捷鍵。

5. “幫助上下文 ID” 。允許為 context ID 指定唯一數(shù)值。在 HelpFile 屬性指定的幫助文件中用該數(shù)值查找適當(dāng)?shù)膸椭黝}。

6. “協(xié)調(diào)位置” :該列表框中共有四個可選項,他們決定是否及如何在容器窗體中顯

示菜單。

7. “復(fù)選” :允許在菜單項的左邊設(shè)置復(fù)選標(biāo)記。通常用它來指出切換選項的開關(guān)狀

態(tài)。

8. “有效” :由此選項可決定是否讓菜單項對事件做出響應(yīng),而如果希望該項失效并

以淺灰色顯示出來,則也可取消對該復(fù)選框的選用。

9. “可見”:決定是否將菜單項顯示在菜單上。

10. “顯示窗口列表” :在 MDI 應(yīng)用程序中,確定菜單控件是否包含一個打開的 MDI

子窗體列表。

11. “右箭頭” :每次單擊都把選定的菜單向右移一個等級。一共可以創(chuàng)建四個子菜單

等級。

12. “左箭頭” :每次單擊都把選定的菜單向上移一個等級。一共可以創(chuàng)建四個子菜單

等級。

13. “上箭頭” :每次單擊都把選定的菜單項在同級菜單內(nèi)向上移動一個位置。

14. “下箭頭” :“下箭頭” 。每次單擊都把選定的菜單項在同級菜單內(nèi)向下移動一個位置。

15. “菜單列表” :該列表框顯示菜單項的分級列表。將子菜單項縮進以指出它們的分

級位置或等級。

16. “下一個” :將選定項移動到下一行,往往是為建立下一個菜單項準(zhǔn)備。

17. “插入” :在列表框的當(dāng)前選定行上方插入一行。

18. “刪除” :刪除當(dāng)前選定行。

19. “確定” :關(guān)閉菜單編輯器,并對選定的最后一個窗體進行修改。菜單可以在設(shè)計

時使用,但在設(shè)計時可以通過選定一個菜單,來打開菜單單擊事件的“代碼”窗口,而不是執(zhí)行事件代碼。

20. “取消” :關(guān)閉菜單編輯器,取消所有修改。

2010-4-24 從網(wǎng)上下載并整理

vb點虐 菜單框顯示不一致

你好,如果你在VB.NET中遇到菜單框顯示不一致的問題,可以嘗試以下解決方法:

1.檢查菜單項的屬性:打開菜單設(shè)計器,在屬性面板中檢查每個菜單項的屬性,確保它們都設(shè)置為相同的值。

2.檢查控件的樣式:在控件屬性中檢查樣式屬性,如果設(shè)置了不同的樣式可能會導(dǎo)致菜單框的顯示不一致。

3.更新.NET框架版本:如果以上方法都不能解決問題,可能是因為使用的.NET框架版本太舊而導(dǎo)致??梢試L試更新.NET框架版本。

希望以上方法能夠解決你的問題。你好,如果你在VB.NET中遇到菜單框顯示不一致的問題,可以嘗試以下解決方法:

1.檢查菜單項的屬性:打開菜單設(shè)計器,在屬性面板中檢查每個菜單項的屬性,確保它們都設(shè)置為相同的值。

2.檢查控件的樣式:在控件屬性中檢查樣式屬性,如果設(shè)置了不同的樣式可能會導(dǎo)致菜單框的顯示不一致。

3.更新.NET框架版本:如果以上方法都不能解決問題,可能是因為使用的.NET框架版本太舊而導(dǎo)致??梢試L試更新.NET框架版本。

希望以上方法能夠解決你的問題。

網(wǎng)站標(biāo)題:vb點虐 菜單設(shè)計器 菜單編輯器vb
文章起源:http://muchs.cn/article26/ddgoocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設(shè)計、響應(yīng)式網(wǎng)站網(wǎng)站收錄、品牌網(wǎng)站制作、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)