導(dǎo)入在引用的項目和程序集中定義的命名空間或編程元素 此外 導(dǎo)入在同一個項目中定義的命名空間或元素
丹陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
Imports [?aliasname?=?] namespace or Imports [?aliasname?=?] namespace element
各部分說明
aliasname
可選 導(dǎo)入別名 或名稱 代碼可按該名稱而不是完全限定字符串來引用 namespace
namespace
必選 所導(dǎo)入命名空間的完全限制名稱 可以為嵌套到任意級別的命名空間的字符串
element
可選 命名空間中所聲明編程元素的名稱 可以為任何容器元素
備注
每個源文件可以包含任意數(shù)量的 Imports 語句 這些語句必須位于任何選項聲明(如 Option Strict 語句)之后 任何編程元素聲明(如 Module 或 Class 語句)之前
只能在文件級別使用 Imports 這意味著導(dǎo)入的聲明上下文必須是源文件 而不能是命名空間 類 結(jié)構(gòu) 模塊 接口 過程或塊
當需要使用在一個或多個命名空間中聲明的同名項目時 導(dǎo)入別名十分有用
請注意 Imports 語句不會將其他項目和程序集中的元素提供給您的項目使用 導(dǎo)入不會取代對引用的設(shè)置 它只是使那些已經(jīng)可用于項目的名稱不再需要加以限定
規(guī)則
別名 不應(yīng)使用與 aliasname 相同的名稱在模塊級別聲明成員 如果這樣做 Visual Basic 編譯器只對聲明的成員使用 aliasname 而不再將其識別為導(dǎo)入別名
命名空間名稱 可以提供單個命名空間名稱 也可以提供嵌套命名空間的字符串 每個嵌套命名空間都通過句點 ( ) 與下一個更高級別的命名空間分隔 如下面的示例中所述
Imports System Collections Generic
元素類型 如果提供 element 它必須表示 容器元素 即可包含其他元素的編程元素 容器元素包括類 結(jié)構(gòu) 模塊 接口和枚舉
行為
范圍 Imports 語句所提供元素的范圍取決于是否指定了 element 如果僅指定了 namespace 則該命名空間中所有具有唯一名稱的成員以及該命名空間內(nèi)容器元素的成員無需限定即可使用 如果既指定了 namespace 又指定了 element 則只有該元素的成員無需限定即可使用
限定 命名空間或容器元素外部的代碼通常必須使用該命名空間或容器元素的名稱來限定成員的名稱 除非您的項目要訪問具有相同名稱的另一個成員 否則使用 Imports 語句后將不必進行此類限定 在這種情況下 您可以在每個 Imports 語句中指定一個 aliasname 然后 您只需導(dǎo)入別名即可限定具有相同名稱的成員
示例
下面的示例將導(dǎo)入 Microsoft VisualBasic Strings 類并給其分配一個別名 str 該別名可用于訪問 Left 方法
Place Imports statements at the top of your program Imports str = Microsoft VisualBasic Strings Visual BasicClass testClass ? ?Sub showHello()? ? Display only the word Hello ?? MsgBox(str Left( Hello World )) ?? End Sub End Class lishixinzhi/Article/program/ASP/201311/21880
我們對控件進行分組的原因不外乎三個
為了獲得清晰的用戶界面而將相關(guān)的窗體元素進行可視化分組
編程分組 如對單選按鈕進行分組
為了在設(shè)計時將多個控件作為一個單元來移動
在中 有GroupBox Panel TabControl這三個控件可以實現(xiàn)上面所提到的三個分組目的 所以我們稱它們?yōu)榉纸M控件
這三個控件在功用上十分的相似 特別是GroupBox和Panel控件 只存在一點細微的差別而已(這個差別是 只有GroupBox控件可以顯示標題 而只有Panel控件可以有滾動條) 這里我們就先來了解GroupBox控件的使用
GroupBox(控件組)控件一般是作為其他控件的組的容器的形式存在的 這樣有利于用戶識別 使界面變得更加友好(GroupBox控件相當于Visual Basic以前版本的Frame控件) 使用控件組控件可以將一個窗體中的各種功能進一步進行分類 例如 將各種選項按鈕控件分隔開
當移動單個GroupBox控件時 它所包含的所有控件也將一起移動
在大多數(shù)情況下 對控件組控件沒有實際的操作 我們用它對控件進行分組 通常沒有必要響應(yīng)它的事件 不過 它的Name Text和Font等屬性可能會經(jīng)常被修改 以適應(yīng)應(yīng)用程序在不同階段的要求
GroupBox控件在工具箱中的圖標如圖所示
一 GroupBox控件的常用屬性
Anchor和Dock 這兩個屬性是所有有用戶界面的控件都有的定位屬性 這里就不啰嗦了
Name屬性 標識控件的對象名稱
Text屬性 顯示在GroupBox控件右上方的標題文字 可以用來標識該控件組的描述
Font和ForeColor屬性 用于改變GroupBox控件的文字大小以及文字的顏色 需要注意的時候 它不單改變GroupBox控件的Text屬性的文字外觀 同時也改變其內(nèi)部控件的顯示的Text屬性的文字外觀
二 創(chuàng)建一組控件
在窗體上放置GroupBox控件 從工具箱中拖放一個GroupBox控件到窗體上的合適位置 調(diào)整大小
在屬性窗口中改變GroupBox控件的Text屬性 作為它的標題
在GroupBox控件內(nèi)拖放其它需要的控件 例如RadioButton控件
設(shè)置示例 如圖一所示
圖一 用控件組控件對單選按鈕分組
我們在拖動單個GroupBox控件的時候 它內(nèi)部的控件也會隨著移動 以保持和GroupBox的相對位置不變 同理 刪除GroupBox控件時 它所包含的所有控件也會被刪除掉
當我們調(diào)整GroupBox控件所包含的控件的Anchor和Dock屬性的時候 其參照物將不是Form窗體 而是GroupBox控件了
三 編程添加GroupBox控件以及它所包含的控件
雖然GroupBox控件是在設(shè)計時用視圖設(shè)計布局效果最好 但是無可避免地 很多特殊情況下也是需要在運行做添加控件到控件組中的 這里我們就用代碼來完成上圖一界面的繪制
動態(tài)添加控件一般需要經(jīng)過下面三個步驟
創(chuàng)建要添加的控件實例
設(shè)置新控件的屬性
將控件添加到父控件的 Controls 集合
在Form 代碼的任意位置增加初始化控件的過程InitializeControl() 代碼如下所示
Sub InitializeControl()
首先添加Label和TextBox控件
Dim Label As New System Windows Forms Label
Dim TextBox As New System Windows Forms TextBox
Label
Label Location = New System Drawing Point( )
Label Name = Label
Label Size = New System Drawing Size( )
Label TabIndex =
Label Text = 戶主姓名
TextBox
TextBox Location = New System Drawing Point( )
TextBox Name = TextBox
TextBox Size = New System Drawing Size( )
TextBox TabIndex =
TextBox Text =
把它們添加到父控件Form 的Controls集合中
Me Controls Add(TextBox )
Me Controls Add(Label )
添加三個GroupBox控件
Dim GroupBox As New System Windows Forms GroupBox
Dim GroupBox As New System Windows Forms GroupBox
Dim GroupBox As New System Windows Forms GroupBox
GroupBox
GroupBox BackColor = System Drawing SystemColors Control
GroupBox Location = New System Drawing Point( )
GroupBox Name = GroupBox
GroupBox Size = New System Drawing Size( )
GroupBox TabIndex =
GroupBox TabStop = False
GroupBox Text = 性別
GroupBox
GroupBox Location = New System Drawing Point( )
GroupBox Name = GroupBox
GroupBox Size = New System Drawing Size( )
GroupBox TabIndex =
GroupBox TabStop = False
GroupBox Text = 單元
GroupBox
GroupBox Location = New System Drawing Point( )
GroupBox Name = GroupBox
GroupBox Size = New System Drawing Size( )
GroupBox TabIndex =
GroupBox TabStop = False
GroupBox Text = 樓層
把它們添加到父控件Form 的Controls集合中
Me Controls Add(GroupBox )
Me Controls Add(GroupBox )
Me Controls Add(GroupBox )
添加RadioButton控件并分別繪制在GroupBox控件內(nèi)
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
Dim RadioButton As New System Windows Forms RadioButton
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 男性
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 女性
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 二單元
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 三單元
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 一單元
RadioButton
RadioButton BackColor = System Drawing SystemColors Control
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 四單元
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 二樓
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 三樓
RadioButton
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 一樓
RadioButton
RadioButton BackColor = System Drawing SystemColors Control
RadioButton Location = New System Drawing Point( )
RadioButton Name = RadioButton
RadioButton Size = New System Drawing Size( )
RadioButton TabIndex =
RadioButton Text = 四樓
分別把它們添加到父控件GroupBox的Controls集合中
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
GroupBox Controls Add(RadioButton )
End Sub
把上一頁的代碼復(fù)制添加后 把控件初始化過程InitializeControl()過程添加到Form 的New構(gòu)造函數(shù)中 如下圖二所示
圖二 在New構(gòu)造函數(shù)中添加過程InitializeControl()
現(xiàn)在按F 運行 Form 的窗體控件布局(如下圖三所示)是不是和我們手工布局的圖一的布局是一樣的呢?
lishixinzhi/Article/program/ASP/201311/21749
DomainUpDown 控件在外觀上都是由一個文本框和一對可以上下移動列表的箭頭組成 如下圖一所示
圖一 控件外觀
其功能類似于組合框 您可以將任何類型的數(shù)據(jù)放入列表 同時在文本框中顯示單個字符串值 讓用戶可以通過單擊上箭頭和下箭頭來瀏覽數(shù)據(jù)
在工具箱中 它的圖標顯示如下圖二所示
圖二 工具箱中的DomainUpDown 控件
DomainUpDown 控件的主要屬性為 Items ReadOnly Wrap
一 改變文字顯示與上下箭頭的方向
我們可以通過 TextAlign 屬性來改變控件中的文本對齊方式 通過 UpDownAlign 屬性改變它的上下按鈕對齊方式
示例 在DomainUpDown 控件 Text 屬性中輸入 即文本框顯示的字符 把 TextAlign 屬性 設(shè)置為Center UpDownAlign 屬性設(shè)置為Left 顯示效果如下圖三所示
圖三 改變DomainUpDown 控件顯示外觀
二 ReadOnly 屬性
ReadOnly 屬性用于設(shè)置用戶是否只能使用向上或向下按鈕更改文本 默認值為False 如果為False 則用戶可以在文本框中進行輸入 如果為True 則文本輸入框變?yōu)榛疑?用戶只能通過Up Down按鈕來選擇列表 且當用戶使用鍵盤鍵入的時候 控件自動完成匹配 如假設(shè)列表中存在下面三個字符串的項 aa b 控件ReadOnly 屬性為True 則當我們在文本框中鍵入 時候 控件將自動匹配字符串 如下圖四所示
圖四 DomainUpDown 自動匹配用戶輸入
三 為DomainUpDown 控件添加\刪除列表項
通過 字符串集合編輯器 編輯
我們可以在設(shè)計視圖中為 DomainUpDown 控件添加或者刪除列表項 步驟如下
在 屬性 窗口中找到 Items 屬性 單擊屬性后的 按鈕 彈出 字符串集合編輯器 然后進行編輯 注意每行為一個項
使用代碼添加\刪除
可以使用 Items 集合的 Add 方法將項添加到項列表的末尾 使用 Insert 方法將項插入到列表中的指定位置
可以使用 Items 集合的 Remove 方法按照名稱移除項 使用 RemoveAt 方法按照項的位置移除項
示例代碼如下
在控件列表尾部添加一個字符串 cccc
DomainUpDown Items Add( cccc )
把字符串 cccc 插入到索引位置 (提示 索引是從 開始)
DomainUpDown Items Insert( cccc )
刪除列表中的字符串為 cccc 的項
DomainUpDown Items Remove( cccc )
刪除列表中索引位置為 的項
DomainUpDown Items RemoveAt( )
使用Clear方法清除DomainUpDown 控件的所有項
DomainUpDown Items Clear()
四 DomainUpDown 控件的其它屬性
Sorted 屬性 指示項集合是否排序 當 Sorted 設(shè)置為 true 時 將按字母順序?qū)吓判?默認為False
Wrap 屬性 當 Wrap 設(shè)置為 true 時 如果達到了集合中的最后一項并繼續(xù)滾動 則列表將從第一項重新開始 看起來像是連續(xù)的
lishixinzhi/Article/program/net/201311/11362
五.繪制個性化菜單
先執(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的當前窗口切換到【Form vb(設(shè)計)】窗口 并從【工具箱】中的【W(wǎng)indows窗體組件】選項卡中往Form 窗體中拖入下列組件
一個MainMenu組件 名稱為 MainMenu
選中 MainMenu 組件 單擊鼠標右鍵 在彈出的菜單中選擇 編輯菜單 并按照圖 所示界面設(shè)計菜單
圖 【自己畫菜單】項目設(shè)計界面之一
此時保存上述步驟 并單擊快捷鍵F 則得到圖 所示界面
圖 【自己畫菜單】運行界面之一
這樣通過菜單編輯器就完成了一個非常普通的菜單 下面就對此菜單進行改造 在改造之前 要先設(shè)定項目中的三個MenuItem類實例的OwnerDraw屬性值為 True 因為只有此屬性值為 True 才會觸發(fā)繪制菜單時所需要的DrawItem事件和MeasureItem事件 之后再在上面項目的基礎(chǔ)上執(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 菜單項對應(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ù)菜單項的當前繪制狀態(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è)定菜單項的寬度(當然也可以設(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