Visual Basic 语 言 程 序 设 计第 10章 菜单程序设计
菜单对我们来说是非常熟悉的,在
Windows环境下,几乎所有的应用软件都是通过菜单来实现各种操作。菜单用于给命令进行分组,使用户能够更方便、
更直观地访问这些命令。本章将介绍 VB
菜单的使用。
Visual Basic 语 言 程 序 设 计
10.1 概 述
菜单的作用基本有两个:一是提供人机对话的界面,以便让用户选择应用系统的各种功能;
二是管理应用系统,控制各种功能模块的运行。
一个高质量的菜单程序,不仅能使系统美观,
而且能使操作者使用方便,并可避免由于误操作而带来的严重后果。
在实际应用中,菜单可分两种基本类型,即下拉式菜单和弹出式菜单。用鼠标右键单击窗体时所显示的菜单就是弹出式菜单。
Visual Basic 语 言 程 序 设 计
10.1.1 下拉菜单
下拉式菜单是一种典型的窗口式菜单。窗口是指屏幕上一个特定的矩形区域。它可以从屏幕上消失,也可以重新显示在屏幕上,各个窗口之间也允许覆盖。下拉式菜单自上而下在屏幕上,下拉,一个个窗口菜单,
供用户选择或输入信息。在 Windows及各种应用软件中,
下拉式菜单得到了广泛的应用。
在下拉式菜单系统中,一般有一个主菜单,其中包括若干选择项。主菜单的每一项又,下拉,出下一级菜单,这样逐级下拉,用一个个窗口的形式弹出在屏幕上,操作完毕即可从屏幕上消失,并恢复原来的屏幕状态。
Visual Basic 语 言 程 序 设 计
1.下拉菜单的优点
(1)整体感强,操作一目了然,界面友好、直观、使用方便,易于学习和掌握。
(2)具有导航功能。在下拉式菜单中,用户能方便地选择所需要的操作,随时可以灵活地转向另一功能,为用户在各个菜单的功能间导航。
(3)占用屏幕空间小,通常只占用屏幕 (窗体 )
最上面一行,在必要时下拉出一个子菜单。这样可以使屏幕 (窗体 )有较大的空间,用来显示各种处理过程等。
Visual Basic 语 言 程 序 设 计
2.下拉菜单的结构
在 VB中,下拉式菜单在一个窗体上设计,窗体被分为 3
部分:第一部分为菜单栏 (或主菜单行 ),它是菜单的常驻行,位于窗体的顶部 (窗体标题的下面 ),由若干个菜单标题组成;第二部分为子菜单区,这一区域为临时性的弹出区域,只有在用户选择了相应的主菜单项后才会弹出子菜单,以供用户进一步选择菜单的子项,子菜单中的每一项是一个菜单命令或分隔条,称为菜单项;第三部分为工作区,程序运行时可以在此区域内进行输出输入操作。图 10.1显示出写字板下拉式菜单的一般结构。
在用 VB设计下拉式菜单时,把每个菜单项 (主菜单或子菜单项 )看做是一个图形对象,即控件,并具备与某些控件相同的属性。
Visual Basic 语 言 程 序 设 计
10.1.2 弹出式菜单
弹出式菜单是一种小型的菜单,它可以在窗体的某个地方显示出来,对程序事件作出响应。通常用于对窗体中某个特定区域有关的操作或选项进行控制,例如用来改变某个文本区的字体属性等。
与下拉式菜单不同,弹出式菜单不需要在窗口顶部下拉打开,而是通过单击鼠标右键,在窗口 (窗体 )的任意位置打开,
因而使用方便,具有较大的灵活性。
Visual Basic 语 言 程 序 设 计
10.1.3 设计菜单的步骤
设计菜单的操作步骤如下:
– (1)建立窗体,添加控件。
– (2)打开,菜单编辑器,窗口。
– (3)设置各菜单项属性。
– (4)为相应的菜单命令添加事件过程。
Visual Basic 语 言 程 序 设 计
10.1.4 菜单编辑器
对于可视语言 (如 VB,VFP,VC等 )来说,
菜单的设计要简单和直观得多,因为它省去了屏幕位置计算,也不需要保存和恢复屏幕区域。全部设计都在一个窗口中完成。利用这个窗口,可以建立下拉式菜单,最多可达 6层。
在 VB中,设计菜单是通过菜单编辑器,
即菜单设计窗口来完成的。打开菜单编辑器有以下 4种方法:
Visual Basic 语 言 程 序 设 计
10.1.4 菜单编辑器
(1)在 VB主设计窗口中,选择,工具,中的,菜单编辑器,选项。
(2)使用热键 Ctrl+E。
(3)单击工具栏中的,菜单编辑器,按钮。
(4)在要建立菜单的窗体上单击鼠标右键,将弹出一个菜单,如图 10.3所示,然后单击,菜单编辑器,命令。
说明:只有当某个窗体为活动窗体时,才能用上面的方法打开
,菜单编辑器,窗口。打开后的,菜单编辑器,窗口如图 10.3所示。
,菜单编辑器,窗口分为 3个部分,即数据区、编辑区和菜单项显示区。
Visual Basic 语 言 程 序 设 计
1.数据区
用来输入或修改菜单项、设置属性。分为若干栏,各栏的作用如下:
– (1)标题:是一个文本框,用来输入所建立菜单的标题及菜单中每个菜单项的标题,相当于控件的
Caption属性。
– 如果在,标题,栏内,只输入一个减号 (-),则可在菜单中加入一条分隔符。
– 在输入菜单栏项时,如果在字母前加上,&”,那么该字母就成了热键字母。在显示菜单时在该字母下加上一条下划线,可以通过 Alt+带下划线的字母,
来打开菜单或执行相应的菜单命令。
Visual Basic 语 言 程 序 设 计
1.数据区
(2)名称:也是一个文本框,由用户输入菜单项的名称,在程序中用来标识该菜单项,相当于控件的 Name属性,它不会在菜单项显示区中显示出来。在标题文本框中,输入了一个菜单标题,在名称文本框中,应有一个对应的菜单名称。分隔符也要有对应的名称。
(3)索引:用来为控件数组设计下标。
(4)快捷键:是一个列表框,用来设置菜单项的快捷键。单击右端的箭头,将下拉显示可供使用的快捷键。在此可选择输入与菜单项等价的快捷键。
(5)帮助上下文:是一个文本框,可在该框中输入数值,这个值用来在帮助文件 (用 HelpFile属性设置 )中查找相应的帮助主题。
(6)协调位置:是一个列表框,用来确定菜单或菜单项是否出现或在什么位置出现。单击右端的箭头,将下拉一个列表,如图 10.4所示。该列表有 4个选项,其作用如下:
Visual Basic 语 言 程 序 设 计作用,
0-None 菜单项不显示
1-Left 菜单项靠左显示
2-Middle 菜单项居中显示
3-Right 菜单项靠右显示
Visual Basic 语 言 程 序 设 计
1.数据区
(7)复选:是一个检查框,当选择该项时,可以在相应的菜单项边上指定记号 (例如,√,),表示该菜单项是一个选项。
(8)有效:是一个检查框,该检查框决定菜单项是否可选 (有效 )。
当该检查框被选中时,表示菜单项的 Enabled属性为 True,为默认状态,程序执行时菜单高亮度显示,是可选的;如果该项没有被选中,Enabled属性为 False,在程序执行时该菜单项变成灰色,
表示不能被用户选择。
(9)可见:是一个检查框,该检查框确定菜单项是否可见。若该检查框被选中,表示该菜单项的 Visible属性为 True,即菜单项可见。若该检查框没被选中,表示该菜单项的 Visible属性为
False,即菜单项不可见。
(10)显示窗口列表:当该选项被设置为,On”(框内有,√,)时,
将显示当前打开一系列子窗口。用于多文档应用程序。
Visual Basic 语 言 程 序 设 计
2.编辑区
编辑区共有 7个按钮,用来对输入的菜单项进行简单的编辑。菜单在数据区输入,在菜单项显示区显示。
– (1)“→,和,←,按钮:用来产生或取消内缩符号,用来确定菜单的层次。单击一次,→,按钮,可以产生 4个点,单击一次,←,按钮,则可以删除 4个点。前面加,,...”,表示该菜单项为下一级的菜单项。如果选定了某菜单项后,再按
,←,按钮,前面的省略号将取消,表示该菜单是上一级的菜单项。
– (2)“↑,和,↓,按钮:用来改变菜单项的位置。把条形光标移到某个菜单项上,单击,↑,按钮,将使该菜单项上移,
单击,↓,按钮,将使该菜单项下移。
– (3)“下一个,按钮:用来换行,设置下一个菜单项。
– (4)“插入,按钮:在选定的菜单项前,插入一个菜单项。
– (5)“删除,按钮:删除当前 (即条形光标所在的 )菜单项。
Visual Basic 语 言 程 序 设 计
3.菜单项显示区
位于,菜单编辑器,窗口的下部,输入的菜单项在这里显示出来,
并通过内缩符号 (....),表明菜单项的层次。条形光标所在的菜单项是,当前菜单项,。
说明:
– (1)“菜单项,是一个总的名称,它包括 4个方面的内容:菜单名 (菜单标题 )、菜单命令、分隔线和子菜单。
– (2)内缩符号由 4个点组成,它表明菜单项所在的层次,一个内缩符号 (4个点 )表示一层,两个内缩符号 (8个点 )表示两层,最多为 20个点,即 5个内缩符号,它后面的菜单项是第六层。如果一个菜单项前面没有内缩符号,则该菜单为菜单名,即菜单的第一层。
– (3)只有菜单名没有菜单项的菜单称为,顶层菜单,,在输入这样的菜单项时,通常在后面加上一个叹号 (! )。
– (4)除分隔线外,所有的菜单项都可以接收 Click事件。
Visual Basic 语 言 程 序 设 计
3.菜单项显示区
【 例 10.1】 设计一个具有算术运算 (+,-,×,
/ )及清除功能的菜单。从键盘上输入两个数,
利用菜单命令求出它们的和、差、积或商,并显示出来。菜单每个命令都有快捷键。
10.3 菜单项的控制在使用 Windows 或 VB菜单时,有些菜单项呈灰色,在单击这类菜单项时不执行任何操作;有的菜单项前面有,√,记号,表示有效。本节介绍在菜单中增加有效性控制属性、菜单项标记以及增减菜单项。
Visual Basic 语 言 程 序 设 计
10.3.1 有效性
控制菜单中的某些菜单项能根据执行条件的不同进行动态变化,即当条件满足时可以执行,否则不能执行。只要把一个菜单项的,有效,属性设置为 False,就可以使菜单项的,有效,属性失效,
运行后该菜单项变为灰色;为了使一个失效的菜单项变为有效,只要把它的,有效,属性重新设置 True即可实现。
– 例如:使子菜单,加法,设置,失效,,则:
A1.Enabled=False
– 使子菜单,加法,设置,有效,,则:
A1.Enabled=True
Visual Basic 语 言 程 序 设 计
10.3.2 菜单项
标记菜单项标记通过菜单设计窗口中的
,复选,属性设置,当该属性为 True时,
相应的菜单项前有,√,标记;如果该属性为 False,则相应的菜单项前没有
,√,标记。但是,菜单项标记通常是动态地加上或取消的,因此应在程序代码中根据执行情况设置。
Visual Basic 语 言 程 序 设 计
10.3.3 菜单项的增减
用前面的方法建立的菜单是固定的,菜单项不能自动增减。为了增加或减少菜单项,必须打开菜单编辑窗口,对原来的菜单进行增删。
菜单项的增减是通过控件数组来实现的。一个控件数组含有若干个控件,这些控件的名称相同,所使用的事件过程相同,但其中的每个元素可以有自己的属性。和普通数组一样,可以通过下标
(Index)访问控件数组中的元素。控件数组可以在设计阶段建立,
也可以在运行时建立。
– 【 例 10.2】 利用 【 例 10.1】 设计的菜单为基础,增加菜单项增减功能。当用户在窗体上单击时,在,计算 2”菜单中,增加,平方和,,
,立方和,两条命令。当用户在窗体上双击时,在,计算 2”菜单中,
删除这两个命令。
– 10.4 弹出式菜单在实际应用中,除下拉式菜单外,Windows还广泛使用弹出式菜单,几乎在每一个对象上单击鼠标右键都可以显示一个弹出式菜单。弹出式菜单也称快捷菜单。
Visual Basic 语 言 程 序 设 计建立弹出式菜单
通常分两步进行:首先用,菜单编辑器,建立菜单,然后用
PopupMemu方法弹出显示。第一步的操作与前面介绍的方法基本相同,
惟一的区别是,必须把主菜单项的,可见,属性设置为 False。
– 格式:[对象,] PopupMenu 菜单名,标志,X,Y
– 功能,PopupMenu方法用来显示弹出式菜单。
– 说明:
(1)对象:是窗体名。
(2)菜单名:是在,菜单编辑器,中定义的主菜单项名,,可见,属性设置为
False,子菜单项不要设置为 False。
(3)X,Y:是弹出式菜单在窗体上的显示位置。如果省略,则弹出式菜单在鼠标光标的当前位置显示。
(4)标志:指定弹出式菜单的行为。
– 当标志为 0时,弹出式菜单中的项只能对鼠标左键起反应。
– 当标志为 1时,弹出式菜单中的项对鼠标左键和右键都起反应。
– 当标志为 2时,PopupMenu方法只能用在 MouseDown事件过程。
Visual Basic 语 言 程 序 设 计说明
(5)PopupMenu方法的事件过程:建立弹出式菜单,必须把 PopupMenu方法放在
MouseDown事件过程中,该事件才能响应所有的鼠标单击操作。按照惯例,一般通过单击鼠标右键显示弹出式菜单,这可以用 Button变量来实现。对于两个按钮的鼠标来说,左按钮的 Button变量值为
– 1,右按钮的 Button变量值为 2。因此,可以用下面的语句强制通过单击鼠标右键来响应
MouseDown事件,从而才能显示出弹出式菜单。
If Button=2 Then PopupMenu 菜单名
(6)弹出式菜单的代码输入方法:由于主菜单项的,可见,属性为 False,不能在窗体顶部显示,因而不能像下拉式菜单那样通过双击子菜单项的方式进入代码窗口,必须先进入代码窗口 (执行,视图,菜单中的,代码窗口,命令、按 F7键或双击窗体 ),然后单击,对象,框右端的箭头,下拉显示各子菜单项,再单击某个子菜单项,将显示该子菜单项的事件过程代码框架,然后可在该框架内编写代码。
【 例 10.3】 把 【 例 10.1】 菜单加上快捷菜单显示出来。
【 例 10.4】 建立一个弹出式菜单,用来改变文本框中字体的属性。
【 例 10.5】 设计一个应用程序,在第一个文本框中输入文本,选中其中的一段文本,用菜单中的,剪切,或,复制,命令,将所选的文本,放,到剪切板上,再用,粘贴,命令,将剪切板上的内容,粘贴,到第二个文本框中。