狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

VB.NET菜單設計初級基礎

VB.NET菜單設計初級基礎

更新時間:2019-11-09 文章作者:未知 信息來源:網絡 閱讀次數:

可視化編程工具中一般都附帶菜單設計器,使用它就可以方便、快捷的編輯、設計菜單。本文的主要內容就是介紹使用此菜單設計器設計菜單的具體方法,以及個性化菜單的實現方法。

  下面就首先來詳細介紹在VB.NET中設計菜單和處理菜單時的相關問題。

  一.使用Visual Basic .Net中的菜單設計器來設計菜單:

  VB.NET中提供了菜單設計器,通過菜單設計器就不僅能夠設計下拉菜單,也能夠設計彈出菜單。在VB.NET中菜單是應用程序的一個部分,所以在使用VB.NET中的菜單設計器時,首先要新建一個VB.NET的項目。下面是具體的步驟:

  1. 啟動Visual Studio .Net。

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

  3. 將【項目類型】設置為【Visual Basic項目】。

  4. 將【模板】設置為【Windows應用程序】。

  5. 在【名稱】文本框中輸入【菜單編程】。

  6. 在【位置】的文本框中輸入【E:VS.NET項目】,然后單擊【確定】按鈕,這樣在“E:VS.NET項目”目錄中就產生了名稱為“菜單編程”的文件夾,并在里面創建了名稱為“菜單編程”的項目文件。

  7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,并從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件:

  一個MainMenu組件,名稱為“MainMenu1”。

  8. 選中“MainMenu1”組件,單擊鼠標右鍵,在彈出的菜單中選擇“編輯菜單”。可得圖01所示界面


  圖01:利用菜單設計器設計下拉菜單

  9. 在圖01所示的“請在此處輸入”中,按由上至下順序輸入“文件(&F)”、“新建(&N)”、“-”、“打開(&O)”后,此時設計后的菜單如圖02所示:



  圖02:利用菜單設計器設計后的下拉菜單

  在VB.NET中“&”符號和VB中的“&”符號所起的作用完全一致,作用是為菜單設定快捷鍵。“-”符號作用是在菜單項之間設立分割。

  10. 這樣一個簡單的下拉菜單就完成了。如果您的應用程序中還需要加入其他菜單,可以仿效上述方法,在圖02中的“請在此處輸入”區域中輸入相應的菜單的名稱就可以了。

  下面是就利用Visual Basic .Net的菜單設計器來設計彈出菜單的一般步驟。

  1. 在上述項目中,從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入一個ContextMenu組件,名稱為ContextMenu1。

  2. 選中“ContextMenu1”組件,單擊鼠標右鍵,在彈出的菜單中選擇“編輯菜單”。可得圖03所示界面:



  圖03:利用菜單設計器設計彈出菜單


  3. 在圖03所示的“上下文菜單”下的“請在此輸入”中,按由上至下順序輸入“拷貝(&C)”、“剪切(&X)”、“粘貼(&V)”后,此時設計后的菜單如圖04所示:



  圖04:利用菜單設計器設計后的彈出菜單

  4. 選定Form1的屬性選項卡,并設定Form1的“ContextMenu”的屬性值為“ContextMenu1”。

  5. 此時單擊快捷鍵“F5”運行程序,在程序窗體中單擊鼠標右鍵,則彈出上面設計的彈出菜單,具體如圖05所示:


  圖05:在應用程序中使用上述設計好的菜單

  6. 對于其他組件一般也都有“ContextMenu”屬性,只需把組件的“ContextMenu”屬性值設置為設計好的彈出菜單名稱,這樣當在此組件中單擊鼠標右鍵,就會彈出對應的彈出菜單。

   二.MainMenu類、MenuItem類和ContextMenu類:

  雖然使用菜單設計器能夠設計出各種菜單,但要真正掌握VB.NET中的菜單編程,還必須了解并靈活使用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類動態創建圖05所示的由菜單設計器設計出的菜單,其中包括下拉菜單和彈出菜單。下面是具體步驟:

  1. 啟動Visual Studio .Net。

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

  3. 將【項目類型】設置為【Visual Basic項目】。

  4. 將【模板】設置為【Windows應用程序】。

  5. 在【名稱】文本框中輸入【動態創建菜單】。

  6. 在【位置】的文本框中輸入【E:VS.NET項目】,然后單擊【確定】按鈕,這樣在“E:VS.NET項目”目錄中就產生了名稱為“動態創建菜單”的文件夾,并在里面創建了名稱為“動態創建菜單”的項目文件。

  7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,并從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件,并執行相應操作:

  二個Button組件,名稱分別為Button1和Button2,并在這二個組件拖入窗體后,分別設定這二個組件的“Text”屬性值為“創建下拉菜單”和“創建彈出菜單”。之后再分別雙擊,這樣Visual Basic .Net會在Form1.vb中分別產生這二個組件的Click事件對應的處理代碼。

  8. 把Visual Basic .Net的當前窗口切換到Form1.vb的代碼編輯窗口,并用下拉代碼替換Form1.vb中的Button1的Click事件對應的處理代碼,下拉代碼的作用是動態創建圖05中的下拉菜單:

  Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
  Dim MainMenu1 As MainMenu = New MainMenu ( )
  '創建一個MainMenu實例
  Dim myMenuItem1 As MenuItem = New MenuItem ( )
  Dim myMenuItem2 As MenuItem = New MenuItem ( )
  Dim myMenuItem3 As MenuItem = New MenuItem ( )
  Dim myMenuItem4 As MenuItem = New MenuItem ( )
  myMenuItem1.Text = "文件(&F)"
  myMenuItem2.Text = "新建(&N)"
  myMenuItem3.Text = "-"
  myMenuItem4.Text = "打開(&O)"
  '創建四個MenuItem實例,并進行相應設置
  myMenuItem1.MenuItems.Add ( myMenuItem2 )
  myMenuItem1.MenuItems.Add ( myMenuItem3 )
  myMenuItem1.MenuItems.Add ( myMenuItem4 )
  '以myMenuItem1是myMenuItem2、myMenuItem3和myMenuItem4的父菜單項
  MainMenu1.MenuItems.Add ( myMenuItem1 )
  '在MainMenu實例中加入MainItem實例
  Me.Menu = MainMenu1
  '把MainMenu1指派給Form的的Menu屬性,這樣下拉菜單才能夠顯示
  Button1.Enabled = False
  End Sub

  9. 用下列代碼替換Form1.vb中的Button2的Click事件對應的處理代碼,下拉代碼的作用是動態創建圖05中的彈出菜單:

  Private Sub Button2_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button2.Click
  Dim ContextMenu1 As ContextMenu = New ContextMenu ( )
  '創建一個ContextMenu實例
  Dim myMenuItem1 As MenuItem = New MenuItem ( )
  Dim myMenuItem2 As MenuItem = New MenuItem ( )
  Dim myMenuItem3 As MenuItem = New MenuItem ( )
  myMenuItem1.Text = "拷貝(&C)"
  myMenuItem2.Text = "剪切(&X)"
  myMenuItem3.Text = "粘貼(&V)"
  '創建三個MenuItem實例,并進行相應設置
  ContextMenu1.MenuItems.Add ( myMenuItem1 )
  ContextMenu1.MenuItems.Add ( myMenuItem2 )
  ContextMenu1.MenuItems.Add ( myMenuItem3 )
  '在ContextMenu1中加入MenuItem
  Me.ContextMenu = ContextMenu1
  '把ContextMenu1指派給Form的ContextMenu屬性,顯示彈出菜單
  Button2.Enabled = False
  End Sub

  10. 至此【動態創建菜單】項目的全部工作就完成了,單擊快捷鍵“F5”運行程序,單擊程序中的【創建下拉菜單】按鈕,則創建出圖04所示的下拉菜單;單擊程序中的【創建彈出菜單】,則動態創建出圖05所示的彈出菜單。

  如果您要創建的菜單中的菜單項還有子菜單,可以根據菜單項中的父子關系,把子菜單項加入到父菜單項,然后再把父菜單項加入上一級的菜單項或MainMenu和ContextMenu實例中,下面代碼作用是創建圖06所示的下拉菜單,如果是彈出菜單,其做法類似:

  Dim MainMenu1 As MainMenu = New MainMenu ( )
  '創建一個MainMenu實例
  Dim myMenuItem1 As MenuItem = New MenuItem ( )
  Dim myMenuItem2 As MenuItem = New MenuItem ( )
  Dim myMenuItem3 As MenuItem = New MenuItem ( )
  Dim myMenuItem4 As MenuItem = New MenuItem ( )
  Dim myMenuItem5 As MenuItem = New MenuItem ( )
  Dim myMenuItem6 As MenuItem = New MenuItem ( )
  myMenuItem1.Text = "文件(&F)"
  myMenuItem2.Text = "新建(&N)"
  myMenuItem3.Text = "-"
  myMenuItem4.Text = "打開(&O)"
  myMenuItem5.Text = "新建項目"
  myMenuItem6.Text = "新建文件"
  '創建四個MenuItem實例,并進行相應設置
  myMenuItem2.MenuItems.Add ( myMenuItem5 )
  myMenuItem2.MenuItems.Add ( myMenuItem6 )
  'myMenuItem2是myMenuItem5和myMenuItem6的父菜單項
  myMenuItem1.MenuItems.Add(myMenuItem2)
  myMenuItem1.MenuItems.Add ( myMenuItem3 )
  myMenuItem1.MenuItems.Add ( myMenuItem4 )
  '以myMenuItem1是myMenuItem2、myMenuItem3和myMenuItem4的父菜單項
  MainMenu1.MenuItems.Add ( myMenuItem1 )
  '在MainMenu實例中加入MainItem實例
  Me.Menu = MainMenu1

  '把MainMenu1指派給Form的的Menu屬性,這樣下拉菜單才能夠顯示


  圖06:動態創建存在子菜單的下拉菜單

   四..Net Frame Work SDK 為在VB.Net繪制菜單提供的工具:

  .Net Frame Work SDK為Visual Basic .Net實現個性化菜單提供了許多工具。其中最重要是二個事件及其參數:DrawItem事件和其中的DrawItemEventArgs參數,MeasureItem事件和其中的MeasureItemEventArgs參數。

  1. DrawItem事件和其中的DrawItemEventArgs參數:

  DrawItem事件是當菜單項的OwnerDraw屬性設置為True并且發出繪制菜單項的請求時才發生。個性化菜單制作的處理方法就是在此事件中完成的。在DrawItem事件處理程序中將接收一個 DrawItemEventArgs類型的參數,它包含與此事件相關的數據,這些數據對繪制菜單是很重要的。表01是DrawItemEventArgs類型參數提供特定于此事件的信息。

  屬性說明
  BackColor獲取所繪制的項的背景色。
  Bounds 獲取表示所繪制項的邊界的矩形。
  Font獲取分配給所繪制項的字體。
  ForeColor獲取所繪制項的前景色。
  Graphics獲取要在其上繪制項的圖形表面。
  Index獲取所繪制項的索引值。
  State獲取所繪制項的狀態。
         
  2. MeasureItem事件和其中的MeasureItemEventArgs參數:

  觸發MeasureItem事件必須將菜單項的OwnerDraw屬性設置為True,個性化菜單制作可通過此事件來獲取、設定菜單項的大小等。MeasureItem事件處理程序中接收一個MeasureItemEventArgs類型的參數,此參數對獲取、設定菜單項的大小是非常重要的。表02是MeasureItemEventArgs類型參數提供MeasureItem事件的特定信息。

  屬性說明
  Graphics獲取要測量的Graphics對象。
  Index獲取、設置需要有高度和寬度的項索引。
  ItemHeight 獲取、設置由Index指定的項高度。
  ItemWidth獲取、設置由Index指定的項
       表02是MeasureItemEventArgs類型參數提供MeasureItem事件的特定信息

    五.繪制個性化菜單:

  先執行以下操作步驟,下列步驟是通過菜單編輯器設計一個簡單的菜單,為后面重新繪制做基礎:

  1. 啟動Visual Studio .Net。

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

  3. 將【項目類型】設置為【Visual Basic項目】。

  4. 將【模板】設置為【Windows應用程序】。

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

  6. 在【位置】的文本框中輸入【E:VS.NET項目】,然后單擊【確定】按鈕,這樣在“E:VS.NET項目”目錄中就產生了名稱為“自己畫菜單”的文件夾,并在里面創建了名稱為“自己畫菜單”的項目文件。

  7. 把Visual Studio .Net的當前窗口切換到【Form1.vb(設計)】窗口,并從【工具箱】中的【Windows窗體組件】選項卡中往Form1窗體中拖入下列組件:

  一個MainMenu組件,名稱為“MainMenu1”。

  8. 選中“MainMenu1”組件,單擊鼠標右鍵,在彈出的菜單中選擇“編輯菜單”。并按照圖01所示界面設計菜單:



  圖07:【自己畫菜單】項目設計界面之一

  9. 此時保存上述步驟,并單擊快捷鍵F5,則得到圖08所示界面:

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

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

  把Visual Stuido .Net的當前窗口切換到Form1.vb的代碼編輯窗口,并在InitializeComponent過程之后添加下列代碼,下列代碼是繪制“文件”菜單項,其作用是改變“文件”菜單項的字體、大小和菜單項的,其具體的繪制方法請參考下列代碼中的注釋:

  Private Sub MenuItem1_DrawItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.DrawItemEventArgs ) Handles MenuItem1.DrawItem
  Dim rfBound As RectangleF = New RectangleF ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中
  Dim rfBound1 As Rectangle = New Rectangle ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中
  'Rectangle類型實例和RectangleF類型實例差不多,但在后面代碼中繪制菜單的函數是有區別的
  e.Graphics.FillRectangle(New SolidBrush(Color.LightGreen), rfBound)
  '以LightGreen色彩填充MenuItem1菜單項對應的矩形區域
  Dim s As MenuItem = CType ( sender , MenuItem )
  Dim s1 As String = s.Text
  '獲得MenuItem1菜單項的名稱
  Dim sfTemp As StringFormat = New StringFormat ( )
  sfTemp.Alignment = StringAlignment.Center
  '設定要畫的菜單名稱的對齊方式,中間對齊
  e.Graphics.DrawString ( s1 , New Font ( "宋體" , 10 , 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 ( s1 , New Font ( "宋體" , 10 , FontStyle.Bold ) , New SolidBrush ( Color.Black ) , rfBound , sfTemp )
  '對菜單項名稱繪制
  End If
  e.DrawFocusRectangle ( )
  '在 DrawItemEventArgs參數得到矩形范圍內繪制聚焦框。
  e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( Color.Black ) , 1 ) , rfBound1 )
  '對菜單項的矩形區域繪制矩形框
  End Sub

  操作完成后,保存修改。此時再單擊快捷鍵F5運行程序,可得到如圖09所示的界面:


  圖09:【自己畫菜單】運行界面之二

  可見繪制的“文件”菜單項并沒有完全顯示出來,并且后面的菜單項也沒有顯示。這是因為菜單項的顯示區域并沒有設定,而缺省的空間又不能完全顯示造成的。設定菜單項的顯示區域大小是通過MeasureItem事件來完成的。具體操作是在MenuItem1的DrawItem事件后添加下列代碼,下列代碼是是定義MenuItem1的MeasureItem事件,在此事件中設定菜單項的寬度(當然也可以設定高度等):

  Private Sub MenuItem1_MeasureItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.MeasureItemEventArgs ) Handles MenuItem1.MeasureItem
  e.ItemWidth = 60
  '設定菜單項的寬度
  End Sub

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



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

  可見“文件”菜單項就算繪制出來了,由于其他菜單項沒有繪制處理,所以也未顯示。其他菜單項的繪制方法和“文件”菜單項的繪制方法基本相似,以下是在上述完成的基礎上,對其他菜單項進行繪制,從而得到圖11所示菜單的具體實現步驟:

 
  圖11:【自己畫菜單】運行界面之四

  1. 在Form1.vb中的MenuItem1的MeasureItem事件處理程序之后添加下列代碼,下列代碼是定義MenuItem2的DrawItem事件,其功能是對“新建”菜單項重新繪制:

  Private Sub MenuItem2_DrawItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.DrawItemEventArgs ) Handles MenuItem2.DrawItem
  Dim rfBound As RectangleF = New RectangleF ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中
  Dim rfBound1 As Rectangle = New Rectangle ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中
  'Rectangle類型實例和RectangleF類型實例差不多,但在后面代碼中繪制菜單的函數是有區別的
  e.Graphics.FillRectangle ( New SolidBrush ( Color.LightGray ) , rfBound )
  Dim s As MenuItem = CType ( sender , MenuItem )
  Dim s1 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 -= 5
  e.Graphics.DrawString ( s1 , New Font ( "宋體" , 10 ) , New SolidBrush ( Color.Blue ) , rcText , sfTemp )
  e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( Color.LightGray ) ) , rfBound1 )
  If e.State = ( DrawItemState.NoAccelerator Or DrawItemState.Selected ) Then
  e.Graphics.FillRectangle ( New SolidBrush ( Color.LightYellow ) , rfBound )
  e.Graphics.DrawString ( s1 , New Font ( "宋體" , 10 , FontStyle.Bold Or FontStyle.Underline ) , New SolidBrush ( Color.Red ) , rcText , sfTemp )
  e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( Color.Black ) ) , rfBound1 )
  e.DrawFocusRectangle ( )
  End If
  End Sub

  2. MenuItem2的DrawItem事件處理代碼之后添加下列代碼,下列代碼是定義MenuItem2的MeasureItem事件,在此事件中實現設定“新建”菜單項的長度和高度:

  Private Sub MenuItem2_MeasureItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.MeasureItemEventArgs ) Handles MenuItem2.MeasureItem
  e.ItemWidth = 60
  '設定菜單項的寬度
  e.ItemHeight = 30
  '設定菜單項的高度
  End Sub

  3. 在完成上述操作步驟后,再在MenuItem2的MeasureItem事件處理程序之后添加下列代碼,下列代碼是定義MenuItem3的DrawItem事件,其功能是對“打開”菜單項重新繪制:

  Private Sub MenuItem3_DrawItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.DrawItemEventArgs ) Handles MenuItem3.DrawItem
  Dim rfBound As RectangleF = New RectangleF ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到RectangleF類型實例中
  Dim rfBound1 As Rectangle = New Rectangle ( e.Bounds.X , e.Bounds.Y , e.Bounds.Width - 1 , e.Bounds.Height )
  '根據DrawItemEventArgs參數獲得菜單項矩形區域并存儲到Rectangle類型實例中
  'Rectangle類型實例和RectangleF類型實例差不多,但在后面代碼中繪制菜單的函數是有區別的
  Dim s As MenuItem = CType ( sender , MenuItem )
  Dim s1 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 -= 5
  e.Graphics.DrawString ( s1 , New Font ( "Veranda" , 10 ) , New SolidBrush ( Color.Blue ) , rcText , sfTemp )
  e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( Color.LightGray ) ) , rfBound1 )
  If e.State = ( DrawItemState.NoAccelerator Or DrawItemState.Selected ) Then
   e.Graphics.FillRectangle ( New SolidBrush ( Color.LightYellow ) , rfBound )
   e.Graphics.DrawString ( s1 , New Font ( "Veranda" , 10 , FontStyle.Bold Or FontStyle.Underline ) , New SolidBrush ( Color.Red ) , rcText , sfTemp )
   e.Graphics.DrawRectangle ( New Pen ( New SolidBrush ( Color.Black ) ) , rfBound1 )
   e.DrawFocusRectangle ( )
  End If
  End Sub

  4. MenuItem3的DrawItem事件處理代碼之后添加下列代碼,下列代碼是定義MenuItem3的MeasureItem事件,在此事件中實現設定“新建”菜單項的長度和高度:

  Private Sub MenuItem3_MeasureItem ( ByVal sender As Object , ByVal e As System.Windows.Forms.MeasureItemEventArgs ) Handles MenuItem3.MeasureItem
  e.ItemWidth = 60
  '設定菜單項的寬度
  e.ItemHeight = 30
  '設定菜單項的高度
  End Sub

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

  六.總結:

  本文主要內容是介紹VB.NET設計和創建菜單,其中不僅介紹了使用菜單設計器來靜態設計菜單,還介紹了使用MainMenu類、MenuItem類和ContextMenu類動態創建菜單的實現方法。在動態創建時,首先要了解要創建的菜單類型,是下拉菜單,首先要創建一個MainMenu實例;是彈出菜單,首先要創建一個ContextMenu實例。然后根據菜單中的組成結構,即菜單項中的父子關系,創建出相應菜單,最后就是顯示出菜單,如果是下拉菜單,指派給Form的Menu屬性,如果是彈出菜單,指派給可視組件或Form的ContextMenu屬性,這樣動態創建菜單才能夠顯示出來,動態創建菜單的工作才算完成。

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

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
久久国产福利国产秒拍| 国产亚洲综合精品| 人人狠狠综合久久亚洲| 亚洲一区视频在线| 亚洲精品国产精品乱码不99| 国产精品成人在线观看| 国产精品久久久久久妇女6080| 日本一区二区三区视频视频| 国产精品视频九色porn| 国产精品久久久久一区二区三区| 精品国产精品一区二区夜夜嗨 | 国产网红主播福利一区二区| 久久久久久久网| 国产精品乱码一区二三区小蝌蚪| 中文字幕第一区| 亚洲欧洲国产专区| 亚洲综合免费观看高清完整版| 亚洲国产精品久久久久秋霞影院| 亚洲成人av资源| 麻豆成人在线观看| 精品亚洲成a人在线观看| 国产凹凸在线观看一区二区| 91丝袜美腿高跟国产极品老师 | 久久久久久久久一区二区| 色呦呦日韩精品| 在线不卡一区二区| 久久久久久**毛片大全| 亚洲人成影院在线观看| 日本午夜精品视频在线观看| 国产一区二区三区观看| 91论坛在线播放| 亚洲一区成人| 欧美麻豆精品久久久久久| 久久亚洲一区二区三区四区| 亚洲欧美一区二区三区孕妇| 日韩福利电影在线| www.视频一区| 国产日本精品| 在线播放中文字幕一区| 中日韩av电影| 毛片av一区二区三区| 色综合久久中文字幕综合网| av成人黄色| 6080亚洲精品一区二区| 亚洲欧洲日产国产综合网| 日本亚洲最大的色成网站www| 99这里都是精品| 亚洲欧美视频| 久久先锋资源网| 日韩1区2区日韩1区2区| 暖暖成人免费视频| 欧美性色黄大片手机版| 国产精品久久夜| 国内精品伊人久久久久影院对白| 国产精品国产三级欧美二区| 欧美午夜精品理论片a级按摩| 中文字幕高清不卡| 久久精品国产亚洲a| 国产精品观看| 日韩欧美国产三级| 天堂va蜜桃一区二区三区漫画版| 97精品国产97久久久久久久久久久久| 午夜亚洲影视| 国产精品网站在线播放| 国产一区二区三区高清播放| 欧美专区18| 国产精品久久久久一区二区三区共| 国产专区综合网| 久久av免费一区| 国产精品视频你懂的| 国产91精品精华液一区二区三区| 亚洲欧美久久| 亚洲欧美激情小说另类| 99精品一区二区三区| 8v天堂国产在线一区二区| 亚洲大片免费看| 亚洲黄色在线| 国产欧美精品一区二区三区四区 | 日韩在线卡一卡二| 亚洲激情婷婷| 中文字幕乱码亚洲精品一区| 成人综合在线视频| 欧美日韩高清影院| 日本在线不卡一区| 亚洲综合首页| 一卡二卡三卡日韩欧美| 亚洲一本视频| 中文字幕乱码日本亚洲一区二区| 成人综合婷婷国产精品久久蜜臀| 欧美日韩国产系列| 美女尤物国产一区| 色婷婷精品久久二区二区蜜臂av| 亚洲激情图片小说视频| 亚洲大黄网站| 中文字幕日韩一区| 影音先锋久久久| 国产精品毛片高清在线完整版| 91丨porny丨国产入口| 337p日本欧洲亚洲大胆精品| 福利91精品一区二区三区| 欧美一区二区美女| 高清国产一区二区| 日韩欧美一二三四区| 国产999精品久久久久久| 欧美一区二区不卡视频| 国产成a人亚洲精品| 日韩欧美不卡在线观看视频| 成人免费看片app下载| 精品国产乱码久久久久久图片| 国产mv日韩mv欧美| 久久久精品tv| 亚洲茄子视频| 日韩精品免费专区| 欧美色男人天堂| 国产一区二区不卡在线| 精品国产免费人成电影在线观看四季 | 亚洲黄色视屏| 天天综合天天综合色| 在线亚洲精品福利网址导航| 韩国三级在线一区| 欧美va亚洲va国产综合| 欧美精选在线| 亚洲一级片在线观看| 91国产福利在线| 国产69精品久久久久毛片| 26uuu色噜噜精品一区二区| 欧美日本在线| 亚洲高清免费视频| 欧美欧美午夜aⅴ在线观看| 成人黄色小视频在线观看| 一区视频在线播放| 一本到三区不卡视频| 丰满白嫩尤物一区二区| 日韩一区日韩二区| 日本精品免费观看高清观看| av中文字幕一区| 亚洲精品成人天堂一二三| 欧美日韩精品高清| 欧美日韩一视频区二区| 日韩国产精品91| 久久精品无码一区二区三区| 国产日韩1区| 国产99久久久精品| 亚洲免费毛片网站| 欧美一区二区三区在线观看视频 | 久久蜜桃精品| 99精品欧美一区二区三区综合在线| 一区二区在线免费观看| 欧美精品一卡两卡| 亚洲第一在线| 国产成人免费高清| 亚洲自拍偷拍九九九| 精品国产伦一区二区三区观看体验 | 91视频免费看| 奇米在线7777在线精品| 久久久久久亚洲综合影院红桃| 美女亚洲精品| 欧美精品激情| 国产精品影视在线观看| 亚洲精品大片www| 久久尤物电影视频在线观看| 欧美在线不卡一区| 1024亚洲| 91一区二区三区在线观看| 日韩黄色在线观看| 亚洲婷婷国产精品电影人久久| 7777精品伊人久久久大香线蕉完整版| 亚洲黄色影院| 91在线一区二区| 国产一区二区三区黄视频| 亚洲国产日韩a在线播放| 亚洲国产精品99久久久久久久久| 欧美日韩视频在线观看一区二区三区 | 午夜影院日韩| 黄色亚洲精品| 91免费在线看| 国产成人三级在线观看| 美女视频黄久久| 亚洲第一福利一区| 亚洲乱码中文字幕综合| 国产三级一区二区三区| 在线综合+亚洲+欧美中文字幕| 久久福利电影| 国产农村妇女精品一二区| 精品福利电影| 亚洲午夜激情| 国内自拍视频一区二区三区| 99久久久久久| 99在线热播精品免费| 成人在线视频首页| 国产风韵犹存在线视精品| 狠狠网亚洲精品| 精品一区二区三区免费视频| 日本成人中文字幕在线视频| 亚洲国产精品久久人人爱| 亚洲一二三四在线| 亚洲一区二区三区中文字幕| 亚洲免费观看高清完整版在线观看熊| 91在线精品一区二区| 在线视频国内一区二区|