C#2010  创建菜单栏
菜单栏是Windows窗体程序的重要组成部分,其作用是为Windows窗体程序提供分组的命令选项,供用户进行选择和执行。开发者需要为每一个命令选项添加相应的代码,实现命令的功能。以Windows操作系统自带的【记事本】程序为例,其就包含【文件】、【编辑】、【格式】、【查看】和【帮助】等5个菜单栏,如图9-5所示。
图9-5  带菜单栏的【记事本】程序
在Visual Studio 2010中,使用MenuStrip控件定义应用程序的菜单栏,该控件可以对应用程序命令分组处理,使其更容易被访问。
1.创建命令菜单控件
为应用程序创建菜单栏,可以先创建窗体,然后再在【工具箱】中选择【菜单和工具栏】选项卡,选择【MenuStrip】选项,如图9-6所示。
图9-6  插入菜单栏
单击菜单栏中的第一个菜单输入文本域,然后即可输入第一组命令的名称,如图9-7所示。
图9-7  编辑菜单组名称
在编辑了菜单组的名称之后,可以选择该菜单组的名称,此时,Visual Studio将弹出该菜单,显示预设的一个空项目。与编辑菜单组类似,直接选择该项目,即可输入项目的名称,如图9-8所示。
图9-8  输入菜单项名称
在设置菜单项名称后用户既可以在菜单项右侧添加关于该菜单的子菜单,也可以在菜单项下方添加新的菜单项,如图9-9所示。
图9-9  添加多个菜单项
在Visual Studio中,开发者除了可以将命令添加到菜单栏中,还可以添加几种复合控件。将鼠标光标置于新菜单项名称上方,此时该文本域中将显示一个下拉菜单的按钮。单击此按钮,即可在弹出的菜单中选择插入的控件类型,如图9-10和图9-11所示。
 
menustrip和toolstrip图9-10  单击下拉箭头                    图9-11  选择插入的控件
在图9-11的菜单中,包含4种控件类型,其作用如下所示。
表9-1  菜单中允许添加的控件
控件名
作用
MenuItem
子菜单控件,与选中菜单项后在右侧添加的子菜单相同
ComboBox
内嵌菜单控件,与下拉列表控件相同,在菜单中嵌入一个内部的下拉列表
Separator
分隔线控件,在当前位置添加一个水平分隔线
TextBox
输入文本域控件,允许用户输入文本信息
2.设置菜单属性
作为一种可视化的窗体控件,在Visual Studio中,开发者可以像定义其他控件一样为菜单项设置属性。选中菜单窗体控件,然后即可在【属性】面板中设置菜单控件的属性,如图9-12所示。
图9-12  设置菜单项属性
在Windows窗体设计中,菜单项事实上是MenuStrip类的一个实例。该实例派生自System.Windows.Forms命名空间,并继承System.Windows.Forms类的所有成员。MenuStrip控件可以创建支持高级用户界面和布局功能的自定义菜单,例如文本图像排序、对齐和拖放等命令,都可以由MenuStrip类的实例实现。MenuStrip类具有如下几种常用的属
性,如表9-2所示。
表9-2  MenuStrip类的常用属性
属性
作用
MdiWindowListItem
获取或设置用于显示MDI子窗体列表的ToolStripMenuItem
IsMdiContainer
获取或设置窗体是否为MDI子窗体的容器
ShowItemToolTips
获取或设置是否为MenuStrip显示工具提示
CanOverFlow
获取或设置MenuStrip是否支持溢出显示功能
ShortcutKey
获取或设置与ToolStripMenuItem关联的快捷键
ShowShortcutKeys
获取或设置与ToolStripMenuItem关联的快捷键是否显示在ToolStripMenuItem旁边。
在程序结构中,菜单项的MenuStrip实例中可以包含若干个菜单命令组,每个菜单命令组都是ToolStripMenuItem类的实例。尽管ToolStripMenuItem是由ToolStripItem派生的,但是在功能上,ToolStripMenuItem与MenuStrip一起工作,实现MenuStrip的具体功能。可以将MenuStrip看作是一个容器,而容器中的成员就是ToolStripMenuItem等子控件。