二.MainMenu类MenuItem类和ContextMenu类
虽然使用菜单设计器能够设计出各种菜单但要真正掌握VBNET中的菜单编程还必须了解并灵活使用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类动态创建图所示的由菜单设计器设计出的菜单其中包括下拉菜单和弹出菜单下面是具体步骤
启动Visual Studio Net
选择菜单【文件】|【新建】|【项目】后弹出【新建项目】对话框
将【项目类型】设置为【Visual Basic项目】
将【模板】设置为【Windows应用程序】
在【名称】文本框中输入【动态创建菜单】
在【位置】的文本框中输入【E:\VSNET项目】然后单击【确定】按钮这样在E:\VSNET项目目录中就产生了名称为动态创建菜单的文件夹并在里面创建了名称为动态创建菜单的项目文件
把Visual Studio Net的当前窗口切换到【Formvb(设计)】窗口并从【工具箱】中的【Windows窗体组件】选项卡中往Form窗体中拖入下列组件并执行相应操作
二个Button组件名称分别为Button和Button并在这二个组件拖入窗体后分别设定这二个组件的Text属性值为创建下拉菜单和创建弹出菜单之后再分别双击这样Visual Basic Net会在Formvb中分别产生这二个组件的Click事件对应的处理代码
把Visual Basic Net的当前窗口切换到Formvb的代码编辑窗口并用下拉代码替换Formvb中的Button的Click事件对应的处理代码下拉代码的作用是动态创建图中的下拉菜单
Private Sub Button_Click ( ByVal sender As SystemObject ByVal e As SystemEventArgs ) Handles ButtonClick
Dim MainMenu As MainMenu = New MainMenu ( )
创建一个MainMenu实例
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
myMenuItemText = 文件(&F)
myMenuItemText = 新建(&N)
myMenuItemText =
myMenuItemText = 打开(&O)
创建四个MenuItem实例并进行相应设置
myMenuItemMenuItemsAdd ( myMenuItem )
myMenuItemMenuItemsAdd ( myMenuItem )
myMenuItemMenuItemsAdd ( myMenuItem )
以myMenuItem是myMenuItemmyMenuItem和myMenuItem的父菜单项
MainMenuMenuItemsAdd ( myMenuItem )
在MainMenu实例中加入MainItem实例
MeMenu = MainMenu
把MainMenu指派给Form的的Menu属性这样下拉菜单才能够显示
ButtonEnabled = False
End Sub
用下列代码替换Formvb中的Button的Click事件对应的处理代码下拉代码的作用是动态创建图中的弹出菜单
Private Sub Button
_Click ( ByVal sender As System
Object
ByVal e As System
EventArgs ) Handles Button
Click
Dim ContextMenu As ContextMenu = New ContextMenu ( )
创建一个ContextMenu实例
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
myMenuItemText = 拷贝(&C)
myMenuItemText = 剪切(&X)
myMenuItemText = 粘贴(&V)
创建三个MenuItem实例并进行相应设置
ContextMenuMenuItemsAdd ( myMenuItem )
ContextMenuMenuItemsAdd ( myMenuItem )
ContextMenuMenuItemsAdd ( myMenuItem )
在ContextMenu中加入MenuItem
MeContextMenu = ContextMenu
把ContextMenu指派给Form的ContextMenu属性显示弹出菜单
ButtonEnabled = False
End Sub
至此【动态创建菜单】项目的全部工作就完成了单击快捷键F运行程序单击程序中的【创建下拉菜单】按钮则创建出图所示的下拉菜单单击程序中的【创建弹出菜单】则动态创建出图所示的弹出菜单
如果您要创建的菜单中的菜单项还有子菜单可以根据菜单项中的父子关系把子菜单项加入到父菜单项然后再把父菜单项加入上一级的菜单项或MainMenu和ContextMenu实例中下面代码作用是创建图所示的下拉菜单如果是弹出菜单其做法类似
Private Sub Button
_Click ( ByVal sender As System
Object
ByVal e As System
EventArgs ) Handles Button
Click
Dim ContextMenu As ContextMenu = New ContextMenu ( )
创建一个ContextMenu实例
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
Dim myMenuItem As MenuItem = New MenuItem ( )
myMenuItemText = 拷贝(&C)
myMenuItemText = 剪切(&X)
myMenuItemText = 粘贴(&V)
创建三个MenuItem实例并进行相应设置
ContextMenuMenuItemsAdd ( myMenuItem )
ContextMenuMenuItemsAdd ( myMenuItem )
ContextMenuMenuItemsAdd ( myMenuItem )
在ContextMenu中加入MenuItem
MeContextMenu = ContextMenu
把ContextMenu指派给Form的ContextMenu属性显示弹出菜单
ButtonEnabled = False
End Sub
图动态创建存在子菜单的下拉菜单
四.Net Frame Work SDK 为在VBNet绘制菜单提供的工具
Net Frame Work SDK为Visual Basic Net实现个性化菜单提供了许多工具其中最重要是二个事件及其参数DrawItem事件和其中的DrawItemEventArgs参数MeasureItem事件和其中的MeasureItemEventArgs参数
DrawItem事件和其中的DrawItemEventArgs参数
DrawItem事件是当菜单项的OwnerDraw属性设置为True并且发出绘制菜单项的请求时才发生个性化菜单制作的处理方法就是在此事件中完成的在DrawItem事件处理程序中将接收一个 DrawItemEventArgs类型的参数它包含与此事件相关的数据这些数据对绘制菜单是很重要的表是DrawItemEventArgs类型参数提供特定于此事件的信息
表DrawItemEventArgs类型参数提供DrawItem事件特定的信息
MeasureItem事件和其中的MeasureItemEventArgs参数
触发MeasureItem事件必须将菜单项的OwnerDraw属性设置为True个性化菜单制作可通过此事件来获取设定菜单项的大小等MeasureItem事件处理程序中接收一个MeasureItemEventArgs类型的参数此参数对获取设定菜单项的大小是非常重要的表是MeasureItemEventArgs类型参数提供MeasureItem事件的特定信息
表是MeasureItemEventArgs类型参数提供MeasureItem事件的特定信息
[] [] []