當前位置:成語大全網 - 書法字典 - VB.NET菜單設計初探【3】

VB.NET菜單設計初探【3】

5.要繪制個性化菜單,首先執行以下步驟。下面的步驟是通過菜單編輯器設計壹個簡單的菜單,為後面的重繪打下基礎。

啟動Visual Studio Net

選擇菜單文件|新建|項目,將彈出新建項目對話框。

將項目類型設置為Visual Basic項目。

將模板設置為Windows應用程序。

在名稱文本框中輸入您自己的菜單。

在該位置的文本框中輸入E:\VS NET項目,然後單擊“確定”按鈕,這樣就會在E:\VS NET項目目錄中創建壹個名為“為自己繪制菜單”的文件夾,並在其中創建壹個名為“為自己繪制菜單”的項目文件。

將Visual Studio Net的當前窗口切換到窗體vb(設計)窗口,並將以下組件從工具箱的“Windows窗體組件”選項卡拖到窗體中。

主菜單組件名為MainMenu。

選擇MainMenu組件,單擊鼠標右鍵,從彈出菜單中選擇“編輯”菜單,根據圖中所示的界面設計菜單。

自行繪制菜單項的設計界面之壹。

此時保存以上步驟,點擊快捷鍵F,得到如圖所示的界面。

自己畫壹個菜單運行界面。

這樣,通過菜單編輯器完成了壹個非常常見的菜單,並對以下菜單進行了改革。在改革之前,應該將項目中MenuItem類的三個實例的OwnerDraw的屬性值設置為True,因為只有當該屬性值為True時,才會觸發繪制菜單所需的DrawItem事件和MeasureItem事件,然後在上述項目的基礎上進行下壹步操作。

將Visual Stuido Net的當前窗口切換到vb窗體的代碼編輯窗口,並在InitializeComponent過程後添加以下代碼。下面的代碼用於繪制文件菜單項,其功能是改變文件菜單項的字體大小及其具體繪制方法。請參考以下代碼中的註釋。

private Sub MenuItem _ draw item(ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs)處理MenuItem draw item Dim RF bound As RectangleF = New RectangleF(e Bounds X e Bounds Y e Bounds Width e e Bounds高度)根據draw item eventargs參數,獲取菜單項的矩形區域並將其存儲在RectangleF類型實例中:Dim RF Bounds As rectangle = New rectangle(e Bounds X e Bounds Y e Bounds高度6根據DrawItemEventArgs參數,獲取菜單項的矩形區域並存儲在Rectangle類型實例中。Rectangle類型實例類似於RectangleF類型實例,但在後面的代碼中繪制菜單的功能有所不同。淺綠色)RF bound)用淺綠色填充與MenuItem菜單項對應的矩形區域,dim s as MenuItem = ctype(sender MenuItem)。Dim s As String = s Text菜單項的名稱dim SF temp As String format = new String format()。SF temp alignment = string alignment center設置要繪制的菜單名稱的對齊方式,並在中間對齊e Graphics DrawString(s新字體)。新的實體畫筆(顏色為黑色)RF bound SF temp)指定中間對齊的字體大小,並在指定的矩形區域中重新繪制菜單。然後根據菜單項的當前繪制狀態繪制菜單項e圖形填充矩形(新的實心畫筆(顏色為淺黃色)RF邊界)。用e Graphics抽繩(s新字體(字體樣式加粗)新實體畫筆(顏色為黑色)RF bound SF temp)填充菜單項所在的矩形區域。為菜單項名稱繪制壹個End If e DrawFocusRectangle()。繪制聚焦框eGraphics draw rectangle(New Pen(New Solid Brush(Color Black)))RF限定在由DrawItemEventArgs參數獲得的矩形範圍內。為菜單項的矩形區域繪制壹個矩形框端點。

操作完成後,保存並修改,然後單擊快捷鍵F運行程序得到如圖所示的界面。

繪制自己的菜單操作界面(2)

可以看到,繪制文件的菜單項沒有完全顯示,其後面的菜單項也沒有顯示。這是因為沒有設置菜單項的顯示區域,無法完全顯示默認空間。通過MeasureItem事件設置菜單項的顯示區域大小。具體操作是在Menuitem的DrawItem事件後添加以下代碼。下面的代碼用於定義Menuitem的MeasureItem事件。在該事件中,可以設置菜單項的寬度(當然,也可以設置高度等。).

private Sub menuitem _ measure item(byval sender as object byval e as system windows forms measurement args)處理菜單項measure item e item width =設置菜單項End Sub的寬度。

保存上述更改後,單擊快捷鍵F運行程序,得到如圖所示的界面。

繪制自己的菜單操作界面(3)

可以看出,即使繪制了文件菜單項,也不會顯示它,因為沒有繪制其他菜單項。其他菜單項的繪制方法與文件菜單項的繪制方法基本相似。以下是在上述完成的基礎上繪制其他菜單項以獲得如圖所示菜單的具體實現步驟。

繪制自己的菜單操作界面(四)

在vb窗體中的MenuItem的MeasureItem事件處理程序後添加以下代碼。下面的代碼是定義MenuItem的DrawItem事件,其功能是重新繪制新的菜單項。

private Sub MenuItem _ draw item(ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs)處理MenuItem draw item Dim RF bound As RectangleF = New RectangleF(e Bounds X e Bounds Y e Bounds Width e e Bounds高度)根據draw item eventargs參數,獲取菜單項的矩形區域並將其存儲在RectangleF類型實例中:Dim RF Bounds As rectangle = New rectangle(e Bounds X e Bounds Y e Bounds高度6根據DrawItemEventArgs參數,獲取菜單項的矩形區域並存儲在Rectangle類型實例中。Rectangle類型實例類似於RectangleF類型實例,但在後面的代碼中繪制菜單的功能有所不同。r light gray)RF bound)Dim s As MenuItem = CType(sender MenuItem)Dim s As String = s Text獲取與菜單項對應的文本名稱Dim SF temp As String format = new String format()。SF temp alignment = string alignment center設置矩形區域中文本的對齊方式SF temp line alignment = string alignment center dim RC text as矩形f = RF bound RC text width。= E Graphics DrawString(s新字體(ì)新實體畫筆(顏色為藍色)RC text SF temp)E Graphics draw rectangle(新鋼筆(新實體畫筆(顏色為淺灰色))rfBound)如果E State =(draw itemstate no accelerator或DrawItemState Selected)則e Graphics FillRectangle(新實體畫筆 e Graphics draw rectangle(New Pen(New solid brush(Color Black)))RF bound)e DrawFocusRectangle()在ENDIFEND SUMenuItem的DrawItem事件處理代碼後添加以下代碼。 下面的代碼定義MENUITEM的MeasureItem事件。在這個事件中,新創建的菜單項的長度和高度被設置。

private Sub MenuItem _ measure item(ByVal sender As Object ByVal e As System Windows Forms measure item eventargs)處理菜單項MeasureItem e item width =設置菜單項的寬度e ItemHeight =設置菜單項的高度。End Sub在完成上述操作步驟後添加以下代碼。下面的代碼是定義menuitem的DrawItem事件,它的作用是重新繪制打開的菜單項。

private Sub MenuItem _ draw item(ByVal sender As Object ByVal e As System Windows Forms DrawItemEventArgs)處理MenuItem draw item Dim RF bound As RectangleF = New RectangleF(e Bounds X e Bounds Y e Bounds Width e e Bounds高度)根據draw item eventargs參數,獲取菜單項的矩形區域並將其存儲在RectangleF類型實例中:Dim RF Bounds As rectangle = New rectangle(e Bounds X e Bounds Y e Bounds高度6根據DrawItemEventArgs參數,獲取菜單項的矩形區域並存儲在矩形類型實例中。Rectangle類型實例與RectangleF類型實例相似,但下面代碼中的drawing菜單的功能不同:dim s as menuitem = ctype(sender menuitem)。Dim s As String = s Text Dim SF temp As String format = New String format()SF temp Alignment = String Alignment Center SF temp line Alignment = String Alignment Center Dim rcText As rectangle ef = RF bound rcText Width = e Graphic s DrawString(s New Font(Veranda)New solid brush(Color Blue)rcText SF temp)e Graphics draw rectangle(New Pen 652 如果e State =(draw item State no accelerator或DrawItemState Selected)那麽e Graphics fill rectangle(New solid brush(顏色為淺黃色)RF bound)e Graphics DrawString(s New Font(Veranda Font style Bold或Font style Underline)New solid brush(顏色為紅色)rcText SF temp)e Graphics draw rectangle 6528 下面的代碼定義MENUITEM的MeasureItem事件。在這個事件中,新創建的菜單項的長度和高度被設置。

private Sub MenuItem _ measure item(ByVal sender As Object ByVal e As System Windows Forms measure item eventargs)處理MenuItem測量項e item width =設置菜單項的寬度e ItemHeight =設置菜單項的高度End Sub正確完成上述所有步驟後,本文介紹的手繪菜單就完成了。此時點擊快捷鍵F運行程序,即可得到如圖所示的運行界面。

不及物動詞摘要

本文的主要內容是介紹用VB NET設計和創建菜單,不僅介紹了用菜單設計器靜態設計菜單,還介紹了用MainMenu類MenuItem類和ContextMenu類動態創建菜單的實現方法。在動態創建時,我們必須首先了解要創建的菜單類型是下拉菜單,首先創建MainMenu的實例,然後創建彈出菜單。構建壹個ContextMenu實例,然後根據菜單的組成結構創建相應的菜單,即菜單項中的父子關系,最後顯示菜單。如果是下拉菜單,則分配給表單的菜單屬性,如果是彈出菜單,則分配給表單的可視組件或ContextMenu屬性,以便顯示動態菜單創建,並完成動態創建菜單的工作。

此外,還介紹了在Visual Basic Net中繪制個性化菜單的實現方法和註意事項。在繪制個性化菜單時,最重要的是掌握DrawItem事件和MeasureItem事件的用法以及繪制菜單時要使用的方法。雖然本文繪制的菜單並不美觀,但您可以通過本文介紹的方法對其進行修改,以實現更美觀和個性化的菜單。最後,請記住在繪制菜單時首先將菜單項的OwnerDraw屬性設置為True。

Lishi Xinzhi/Article/program/net/201311/15454