菜单设计
1 概 述
菜单是一系列命令组成的列表,是Windows应用程序普遍使用的一种交互方式,它能够使用户灵活地操作和控制应用程序并能使界面整洁。Visual Basic环境下的菜单分为两种类型:下拉式菜单和弹出式菜单。这两种菜单的设计都要求在“菜单编辑器”中进行。本章将介绍这两种菜单的创建方法。
1.1 下拉式菜单
下拉式菜单一般显示在窗口顶端的菜单栏。菜单栏中的菜单项称为菜单标题。单击某一个菜单标题,将下拉出一个菜单,菜单由若干项菜单命令、分隔条或者下一级子菜单标题组成。
1.2 弹出式菜单
弹出式菜单又称为“快捷菜单”、“上下文相关菜单”,其位置显示比较灵活。当用鼠标在某一个对象(或空白区域)单击右键后弹出的菜单即为弹出式菜单。与下拉式菜单不同的是:弹出式菜单的显示位置不同,它的显示位置取决于鼠标单击时指针的位置;显示内容不同,它显示的内容取决于所选对象以及前后的相关操作。
1.3 菜单设计的步骤
无论是下拉式菜单还是弹出式菜单,每一个菜单项都是VisualBasic的一个控件对象,具有和其他控件一样的属性,如Caption、Name、Check、Enabled和Visible等属性。所不同的是,菜单控件不在Visual Basic的工具箱中,而且菜单控件的属性不能在属性窗口中修改,只能在菜单编辑器中修改。菜单控件只能响应Click事件。
设计菜单的一般步骤如下:
1.根据程序设计的需要进行菜单的界面设计,包括菜单栏中的各菜单标题,各级子菜单中的菜单项,以及它们各自的事件过程。
2.打开菜单编辑器,建立各级菜单,并设置相应的属性。
3.编写程序代码。建立菜单项后,为相应的菜单项编写Click事件代码。
2. 下拉式菜单的建立
1.打开菜单编辑器
打开菜单编辑器的方法有以下几种:
⑴ 选择“工具 | 菜单编辑器”选项。
⑵ 单击工具栏中的“菜单编辑器” 按钮。
⑶ 在窗体上单击鼠标右键,选择弹出菜单中的“菜单编辑器”选项。
⑷ 按【Ctrl+E】键。
2.菜单编辑器的组成
菜单编辑器窗口由三部分组成:数据区、编辑区和菜单显示区。
⑴ 数据区
也称为菜单属性区,位于“菜单编辑器”标题栏的下方,用来设置菜单控件的属性。
标题(P):为程序运行时菜单上的说明文字,如“文件”、“格式”等,相当于普通控件的Caption属性。若是减号“-”将在菜单中显示一条分隔线,常用此种方法使菜单项分组。另外,在标题中可以用“&”为菜单项设定快速访问键,如标题设置为“文件(&F)”则菜单项显示为“文件(F)”。
名称(M):用来标注菜单项的控件名字,这个名字用来在程序中引用菜单项,相当于普通控件的Name属性。所有菜单项的名称属性必须是唯一的,除非这个菜单项是控件数组中的一个元素。
索引(X):相当于其它控件的Index属性,当把多个菜单项定义为控件数组时,索引是控件数组的下标,控件数组中的菜单项具有相同的Name属性,而且是同一个菜单中的相邻菜单项。索引可以不从0开始,也可以不连续,但必须按升序排列。
快捷键(S):用来设置菜单项的快捷键,可以从它的下拉列表框中进行选择。
复选(C):该属性为True(选中)时,在该菜单项前面出现一个“√”标记,表示该项处于活动状态。相当于复选框控件的Checked属性。
有效(E):该属性为False(未选中)时,对应的菜单项呈灰色,表示当前不可用。该属性相当于普通控件的Enabled属性。
可见(V):确定菜单是否可见,该属性为False(未选中)时,对应的菜单项将暂时从菜单中去掉。它相当于普通控件的Visible属性。
帮助上下文ID(H):在Helpfile属性指定的帮助文件中用该数值查找适当的帮助信息。
协调位置(O):选择菜单的显示属性,该属性决定是否及如何在容器窗体中显示菜单,0-None:不显示,1-Left:靠左,2-Middle:居中,3-Right:靠右。
显示窗口列表(W):该属性为True(选中)时,将显示当前打开的一系列子窗口标题。
⑵ 编辑区
数据区下方的区域是菜单编辑区。编辑区上有7个控制按钮,编辑菜单时要借助于这7个按钮。
左右箭头 :单击右箭头,产生内缩符号(….),表示将建立下一级菜单。单击左箭头,删除内缩符号。在Visual Basic 6.0中最多可建立6级子菜单。
上下箭头 :单击上箭头把条形光标上移一个选项,单击下箭头把条形光标下移一个选项。
下一个(N):开始设置一个新的菜单项。
插入(I):用来插入一个新的菜单项。
删除(T):删除条形光标所在的菜单项。
⑶ 菜单显示区
位于菜单设计窗口的下部,用来显示输入的菜单项。显示区上列出了菜单项标题、级别和快捷键等。如果一菜单项相对于上一个菜单项向右缩进,表示它是上一个菜单项的子菜单。向右缩进相同的菜单项属于同一个子菜单。没有缩进的菜单项是顶级菜单项,将显示在菜单栏中。可以在此区域选择要修改的菜单项,用按钮调整菜单项顺序和缩进。
2. 下拉式菜单的建立
3. 弹出式菜单的建立
弹出式菜单是一种独立于菜单栏而显示在窗体上的浮动菜单,根据用户单击鼠标右键时的位置动态地显示。
弹出式菜单的建立分三步进行:
1.用菜单编辑器建立主菜单及其子菜单,并且把各菜单所需的程序代码写好。
2.把菜单标题项的Visible(可见性)属性设置为False。
3.编辑需要弹出菜单对象的MouseDown事件。用PopupMenu方法显示弹出式菜单。
格式:[对象名.]PopupMenu菜单名[,Flags[,X[,Y[,BoldCommand]]]]
说明:
⑴ 对象名:需要弹出菜单的对象名称,一般为窗体,省略对象指的是当前窗体。
⑵ 菜单名:是指通过“菜单编辑器”定义的菜单标题项名称属性Name。
⑶ Flags:位置参数,用来指定弹出式菜单的位置及行为。包含位置常数和行为常数。这两组参数可以单独使用,也可以联合使用。联合使用时,每组中取一个值,两值相加。如4+2表示弹出式菜单显示的位置中心在X坐标,单击左键或右键都会选择菜单项。
⑷ X,Y是坐标值,表示弹出式菜单在窗体上显示的位置,默认为鼠标坐标。
⑸ BoldCommand用于指定菜单中要以粗体显示的菜单名称。
⑹ 除菜单名外,其它参数都是可选参数。若省略所有可选参数,运行程序时,在窗体任意位置单击鼠标左键或右键,将弹出一个菜单。
=============================================================================================
实验
建立一个菜单程序,控制移动字幕。
项目分析:
这个程序需要建立两类菜单,下拉菜单和弹出式菜单
制作菜单:
打开菜单编辑器
建立一个菜单控制的移动字幕,程序运行结果如图11.1所示。窗体上添加一个标签,一个时钟控件。利用菜单编辑器制作两条菜单“控制”和“方向”。“控制”菜单下有“开始”、“暂停”、“复位”、“标题文字”、“退出”等菜单项。其中,“开始”菜单项可以让标签字幕开始移动,单击后变为灰色,并使“暂停”菜单项可用;“暂停”菜单项可以让标签字幕停止移动,单击后变为灰色,并使“开始”菜单项可用;“复位”菜单项可以将标签水平放置到窗体中间;单击“标题文字”菜单项可以弹出一个输入框,输入的文字作为标签的标题;“退出”菜单项可以结束工程运行。“方向”菜单下有“向左”、“向右”两个菜单项,分别可以控制菜单移动的方向,单击某一个菜单项后加复选号,同时取消另一个菜单项的复选号。
项目设计:
⑴创建界面。新建工程,在窗体上添加标签控件Label1和时钟控件Timer1。
按表格中的属性值修改标签和计时器的属性。
⑵设置属性。属性设置见表11.1。
表11.1 属性设置
| 控件 | 属性名称 | 属性值 |
| Label1 | Caption | 欢迎光临 |
| Label1 | AutoSize | True |
| Label1 | Font | 字号设为48 |
| Timer1 | Interval | 100 |
| Timer1 | Enabled | False |
⑶建立菜单。打开菜单编辑器,按照表格中的菜单结构依次输入每个菜单项,这里面包括了下拉菜单的两个等层菜单和弹出式菜单,颜色那一项开始就是弹出式菜单,需要将颜色设置为不可见。编辑完毕后在窗体上就可以看到控制和方向两个下拉式菜单。弹出式菜单是隐藏的。
(4)编写程序代码。打开每一个菜单项的click事件,编写响应的代码。其中开始和暂停两项主要是控制计时器可用不可用。
复位是将标签放置到窗体中央
标题文字项可以弹出一个消息框输入标题
向左向右是修改菜单项的checked属性设置
在timer1的timer事件中编写标签运动的代码,首先判断向左向右两个菜单项checked属性的状态,来决定label1的left属性值的变化。如果标签移动到了窗体的左侧再将其放置到窗体右侧继续移动。
下面编写弹出式菜单。在这几个颜色项的click事件中编写让标签变色的代码
找到form1的mousedown事件,编写判断button的值,如果为2那么将菜单弹出。Color就是弹出式菜单等层项的名称。
运行程序测试程序功能。
建立菜单见表11.2。
表11.2 菜单结构
| 标题 | 名称 | 内缩符号 | 复选 | 可用 |
| 控制 | Kz | 无 | 是 | |
| …开始 | Ks | 1 | 是 | |
| …暂停 | Zt | 1 | 否 | |
| …复位 | Fw | 1 | 是 | |
| …标题文字 | Btwz | 1 | 是 | |
| …退出 | Tc | 1 | 是 | |
| 方向 | Fx | 无 | 是 | |
| …向左 | Xz | 1 | 是 | 是 |
| …向右 | Xy | 1 | 是 |
提示:
由于菜单初始的可用性设置为“否”后,不能打开该菜单的代码窗口,所以对于“暂停”菜单,应该先将其可用性设置为“是”,当编写完代码后,再次进入菜单编辑器,将其可用性设置为“否”。
⑷编写代码。
Private Sub ks_Click() '“开始”菜单
ks.Enabled = False
zt.Enabled = True
Timer1.Enabled = True
End Sub
Private Sub zt_Click() '“暂停”菜单
zt.Enabled = False
ks.Enabled = True
Timer1.Enabled = False
End Sub
Private Sub fw_Click() '“复位”菜单
Label1.Left = (Form1.Width - Label1.Width) / 2
End Sub
Private Sub btwz_Click() '“标题文字”菜单
标题= InputBox("请输入标题文字","输入", "欢迎光临")
Label1.Caption = 标题
End Sub
Private Sub tc_Click() '“退出”菜单
End
End Sub
Private Sub xy_Click() '“向右”菜单
xz.Checked = False
xy.Checked = True
End Sub
Private Sub xz_Click() '“向左”菜单
xz.Checked = True
xy.Checked = Flase
End Sub
Private Sub Timer1_Timer() '计时器事件
If xz.Checked = TrueThen
Label1.Left = Label1.Left - 200
If Label1.Left <= -Label1.Width Then
Label1.Left = Form1.Width
End If
End If
If xy.Checked = TrueThen
Label1.Left = Label1.Left + 200
If Label1.Left >= Form1.Width Then
Label1.Left = -Label1.Width
End If
End If
End Sub

