《《菜单程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《菜单程序设计》PPT课件.ppt(40页珍藏版)》请在三一办公上搜索。
1、第 11 章 菜单程序设计,11.1 Visual Basic 中的菜单,11.2 菜单编辑器,11.3 用菜单编辑器建立菜单,11.4 菜单项的控制,11.5 菜单项的增减,11.6 弹出式菜单,11.7 应用举例,在Windows环境下,几乎所有的应用软件都通过菜单实现各种操作。而对于Visual Basic应用程序来说,当操作比较简单时,一般通过控件来执行;而当要完成较复杂的操作时,使用菜单具有十分明显的优势。本章,将介绍Visual Basic的菜单程序设计技术。,11.1 Visual Basic中的菜单 菜单的基本作用有两个,一是提供人机对话的界面,以便让使用者选择应用系统的各种功
2、能;二是管理应用系统,控制各种功能模块的运行。一个高质量的菜单程序,不仅能使系统美观,而且能使操作者使用方便,并可避免由于误操作而带来的严重后果。在实际应用中,菜单可分为两种基本类型,即弹出式菜单和下拉式菜单。例如,启动Visual Basic后,单击“文件”菜单所显示的就是下拉式菜单,而用鼠标右键单击窗体时所显示的菜单就是弹出式菜单。,下拉式菜单是一种典型的窗口式菜单。窗口是指屏幕上一个特定的矩形区域。下拉式菜单自上而下在屏幕上“下拉”一个个窗口菜单供用户选择或输入信息。在下拉式菜单系统中,一般有一个主菜单,其中包括若干个选择项。主菜单的每一项又可“下拉”出下一级菜单,这样逐级下拉,用一个个
3、窗口的形式弹出在屏幕上,操作完毕即可从屏幕上消失,并恢复原来的屏幕状态。下拉式菜单具有很多优点,例如:(1)整体感强,操作一目了然,界面友好、直观,使用方便,易于学习和掌握。(2)具有导航功能。在下拉式菜单中,用户能方便地选择所需要的操作,随时可以灵活地转向另一功能,为用户在各个菜单的功能间导航。,(3)占用屏幕空间小,通常只占用屏幕(窗体)最上面一行,在必要时下拉出一个子菜单。在Visual Basic中,下拉式菜单在一个窗体上设计,窗体被分为3部分:第一部分为菜单栏(或主菜单行),它是菜单的常驻行,位于窗体的顶部(窗体标题的下面),由若干个菜单标题组成;第二部分为子菜单区,这一区域为临时性
4、的弹出区域,只有在用户选择了相应的主菜单项后才会弹出子菜单,以供用户进一步选择菜单的子项,子菜单中的每一项是一个菜单命令或分隔条,称为菜单项;第三部分为工作区,程序运行时可以在此区域内进行输出输入操作。下图显示下拉式菜单的一般结构。,在用Visual Basic设计下拉式菜单时,把每个菜单项(主菜单或子菜单项)看作是一个图形对象,即控件,它具备与某些控件相同的属性。,11.2 菜单编辑器 对于Visual Basic来说,菜单的设计要简单和直观得多,因为它省去了屏幕位置的计算,也不需要保存和恢复屏幕区域。全部设计都在一个窗口内完成。利用这个窗口,可以建立下拉式菜单,最多可达6层。Visual
5、Basic中的菜单通过菜单编辑器,即菜单设计窗口建立。可以通过以下4种方式进入菜单编辑器:(1)执行“工具”菜单中的“菜单编辑器”命令。(2)使用热键CtrlE。(3)单击工具栏中的“菜单编辑器”按钮。(4)在要建立菜单的窗体上单击鼠标右键,将弹出一个菜单,然后单击“菜单编辑器”命令。注意,只有当某个窗体为活动窗体时,才能用上面的方法打开菜单编辑器窗口。,如图所示:菜单编辑器窗口,菜单编辑器窗口分为3个部分,即数据区、编辑区和菜单项显示区。,1.数据区用来输入或修改菜单项、设置属性。分为若干栏,各栏的作用如下:(1)标题:是一个文本框,用来输入所建立的菜单的名字及菜单中每个菜单项的标题(相当于
6、控件的Caption属性)。如果在该栏中输入一个减号(),则可在菜单中加入一条分隔线。(2)名称:也是一个文本框,用来输入菜单名及各菜单项的控制名(相当于控件的Name属性),它不在菜单中出现。菜单名和每个菜单项都是一个控件,都要为其取一个控件名。(3)索引:用来为用户建立的控件数组设立下标。(4)快捷键:是一个列表框,用来设置菜单项的快捷键(热键)。单击右端的箭头,将下拉显示可供使用的热键。在此可选择输入与菜单项等价的热键。,(5)帮助上下文:是一个文本框,可在该框中键入数值,这个值用来在帮助文件(用HelpFile属性设置)中查找相应的帮助主题。(6)协调位置:是一个列表框,用来确定菜单或
7、菜单项是否出现或在什么位置出现。单击右端的箭头,将下拉显示一个列表,该列表有4个选项,作用如下:0None 菜单项不显示1Left 菜单项靠左显示2Middle 菜单项居中显示3Right 菜单项靠右显示(7)复选:当选择该项时,可以在相应的菜单项旁边加上指定的记号(例如“”)。利用这个属性,可以指明某个菜单项当前是否处于活动状态。,(8)有效:用来设置菜单项的操作状态。在默认情况下,该属性被设置为True,表明相应的菜单项可以对用户事件作出响应。如果该属性被设置为“False”,则相应的菜单项会“变灰”,不响应用户事件。(9)可见:确定菜单项是否可见。一个不可见的菜单项是不能执行的,在默认情
8、况下,该属性为True,即菜单项可见。当一个菜单项的“可见”属性设置为False时,该菜单项将暂时从菜单中去掉;如果它的“可见”属性改为True,则该菜单项将重新出现在菜单中。(10)显示窗口列表:当该选项被设置为“On”(框内有“”)时,将显示当前打开的一系列子窗口。用于多文档应用程序。,2、编辑区 编辑区共有7个按钮,用来对输入的菜单项进行简单的编辑。菜单在数据区输入,在菜单项显示区显示。(1)左、右箭头:用来产生或取消内缩符号。单击一次右箭头可以产生4个点,单击一次左箭头则删除4个点。4个点被称为内缩符号,用来确定菜单的层次。(2)上、下箭头:用来在菜单项显示区中移动菜单项的位置。把条形
9、光标移动到某个菜单项上,单击上箭头将使该菜单项上移,单击下箭头将使该菜单项下移。(3)下一个:开始一个新的菜单项(与回车键作用相同)。,(4)插入:用来插入新的菜单项。当建立了多个菜单项后,如果想在某个菜单项前插入一个新的菜单项,可先把条形光标移到该菜单项上(单击该菜单项即可),然后单击“插入”按钮,条形光标覆盖的菜单项将下移一行,上面空出一行,可在这一行插入新的菜单项。(5)删除:删除当前(即条形光标所在的)菜单项。,3、菜单项显示区 位于菜单设计窗口的下部,输入的菜单项在这里显示出来,并通过内缩符号()表明菜单项的层次。条形光标所在的菜单项是“当前菜单项”。说明:(1)“菜单项”是一个总的
10、名称,它包括4个方面的内容:菜单名(菜单标题)、菜单命令、分隔线和子菜单。(2)内缩符号由4个点组成,它表明菜单项所在的层次,一个内缩符号(4个点)表示一层,两个内缩符号(8个点)表示两层,最多为20个点,即5个内缩符号,它后面的菜单项为第六层。如果一个菜单项前面没有内缩符号,则该菜单为菜单名,即菜单的第一层。,(3)只有菜单名没有菜单项的菜单称为“顶层菜单”(top-level menu),在输入这样的菜单项时,通常在后面加上一个叹号(!)。(4)如果在“标题”栏内只输入一个“”,则表示产生一个分隔线。(5)除分隔线外,所有的菜单项都可以接收Click事件。在输入菜单项时,如果在字母前加上“
11、&”,则显示菜单时在该字母下加上一条下划线,可以通过Alt带下划线的字母打开菜单或执行相应的菜单命令。,11.3 用菜单编辑器建立菜单 本节,通过例子来说明如何编写菜单程序。该例很简单,但它说明了菜单程序设计的基本方法和步骤,因而具有通用性。不管多复杂的菜单,都可以用这里介绍的方法设计出来。,下面按以下步骤设计菜单:(1)执行“工具”菜单中的“菜单编辑器”命令,打开“菜单编辑器”窗口。(2)在“标题”栏中键入“计算加、减”(主菜单项 1),在菜单项显示区中出现同样的标题名称。(3)按 Tab键(或用鼠标)把输入光标移到“名称”栏。(4)在“名称栏”中键入“Calc1”,此时菜单项显示区没有变化
12、。(5)单击编辑区中“下一个”按纽,菜单项显示区中的条形光标下移,同时数据区的“标题”栏及“名称”栏被清为空白,光标回到“标题”栏。(6)在“标题栏”键入“加”,该信息同时在菜单项显示区中显示出来。(7)用Tab键或鼠标把输入光标移到“名称”栏,键入“Add”(8)单击编辑区的右箭头“”,菜单项显示区中的“加”右移,同时其左侧出现一个内缩符号(),表明“加”是计算加减的下一级菜单。(9)单击“快捷键”右端的箭头,显示出各种复合键供选择,从中选出,“Ctrl+A”作为“加”菜单的热键,此时,在该菜单项右侧出现“Ctrl+A”.(10)单击编辑区“下一个”按钮,菜单项显示区的条形光标下移,左端自动
13、出现内缩符号“”。(11)在“标题栏”内键入“减”,然后在“名称”栏内键入“Min”作为菜单项(控件)名称。(12)单击“快捷键”栏右端的箭头,从中选出“Ctrl+B”作为“减”菜单项的热键。(13)单击编辑区的“下一个”,按钮,菜单项的条形光标下移,并带有内缩符号“”。由于要建立的是主菜单项,因此要消除内缩符号。单击编辑区的左箭头“”,内缩符号“”消失,即可建立主菜单项。建立主菜单“计算乘、除”和两个子菜单及建立主菜单“清除与退出”和两个子菜单的操作与前面的各步骤类似。可模仿建立。设计结束后窗口如图所示,此时单击右上角“确定”按钮,菜单的建立工作结束。,11.4 菜单项的控制 在使用Wind
14、ows或Visual Basic菜单时,大家已见过“与众不同”的菜单项。例如有些菜单项呈灰色,在单击这类菜单项时不执行任何操作;有的菜单项前面有“”号,或者在菜单项的某个字母下面有下划线,等等。这一节就来介绍如何在菜单中增加这些属性。,11.4.1 有效性控制 菜单中的某些菜单项能根据执行条件的不同进行动态变化,即当条件满足时可以执行,否则不能执行。例如,为了拷贝一段文本,必须先把它定义成文本块,然后才能执行相应的拷贝命令(菜单项),因此,应当根据条件的不同设置某些菜单项的有效性。前面讲过菜单项的“有效”属性,菜单项的有效性就是通过该属性来控制的。当把一个菜单项的“有效”属性设置为False,
15、就可以使其失效,运行后该菜单项变为灰色;为了使失效的菜单项变为有效,只要把它的“有效”属性重新设置为True即可。例如在前一节的例子中,用Add.EnabledFalse可以使子菜单“加”失效,而Add.EnabledTrue可以使子菜单“加”重新有效。,失效的菜单项呈灰色显示,单击时不产生任何操作。为了能使程序正常运行,有时候需要使某些菜单项失效,以防止出现误操作。例如在前一节的例子中,只有在文本框内输入运算数之后才能进行加、减、乘、除操作,否则运算是没有意义的。因此,如果尚未输入数据,则应使执行加、减、乘、除的菜单项失效,输入数据后生效。为此可添加两个事件过程:Private Sub nu
16、m1_change()If num1.Text=Thenadd.Enabled=Falsemin.Enabled=Falsemul.Enabled=Falsediv.Enabled=FalseElseadd.Enabled=Truemin.Enabled=Truemul.Enabled=True,div.Enabled=TrueEnd IfEnd SubPrivate Sub num2_change()If num2.Text=Thenadd.Enabled=Falsemin.Enabled=Falsemul.Enabled=Falsediv.Enabled=FalseElseadd.Enab
17、led=Truemin.Enabled=Truemul.Enabled=Truediv.Enabled=TrueEnd IfEnd Sub,除了添加上述两个事件过程外,还要取消Add,Min,Mul,Div等4个菜单项的“有效”属性设置。方法如下:启动Visual Basic,装入前面例子中的文件,然后执行“工具”菜单中的菜单编辑器命令,打开“菜单编辑器”窗口,把菜单项显示区的条形光标移到菜单项“加”上,把数据区的“有效”属性变为“Off”(单击该复选框,去掉框中的“”)同样,将“减”、“乘”、“除”3个菜单项的“有效”属性改为“Off”。经过修改后,再运行程序,单击主菜单项“计算加、减”或“
18、计算乘、除”其子菜单均变为灰色,表示不能执行与其有关的事件。除非,先在两个文本框内输入数值,然后再选择计算类型,此时子菜单呈现正常。可执行相应操作。,菜单设计举例 6,11.4.2 菜单项标记 所谓菜单项标记,就是在菜单项前面加上一个“”。它有两个作用:一是可以明显地表示当前某个(或某些)命令状态是“On”或“Off”;二是可以表示当前选择的是哪个菜单项。如前所述,菜单项标记通过菜单设计窗口中的“复选”属性设置,当该属性为True时,相应的菜单项前有“”标记;如果该属性为False,则相应的菜单项前没有“”标记。但是,菜单项标记通常是动态地加上或取消的,因此应在程序代码中根据执行情况设置。,1
19、1.4.3 键盘选择 在一般情况下,菜单项通过鼠标选择,即单击某个菜单项,执行相应的操作。在Visual Basic中,也可以通过键盘选择所需要的菜单项。用键盘选择菜单通常有两种方法,即热键和访问键(Access Key)。前面已介绍过热键的设置方法。用热键可以直接执行菜单命令,不必一级一级地下拉菜单,速度较快,适合熟悉键盘的用户使用。所谓访问键,就是菜单项中加了下划线的字母,只要按Alt和加了下划线的字母键,就可以选择相应的菜单项。用访问键选择菜单项时,必须一级一级地选择。也就是说,只有在下拉显示下一级菜单后,才能用Alt键和菜单项中有下划线的字母键选择。,热键和访问键都在设计菜单时直接指定
20、。为了设置访问键,必须在准备加下划线的字母的前面加上一个“&”,例如:&Additin 在设计菜单时,如果按上面的格式输入菜单项的标题,则程序运行后,就可在字母“A”的下面加上下划线,按AltA即可选取这个菜单项。在设置访问键时,应注意避免重复。按照使用习惯,通常把第一个字母设置为访问键,这就有可能出现重复,例如,有Clean和Copy两个菜单项,如果都用第一个字母作为访问键,就会出现二义性,当用AltC执行菜单命令时,系统无法判断执行Clean还是Copy。在这种情况下,可以用其他字母作为访问键,例如可以设置为:&Clean C&opy这样设置后,就可以用Alt+C和Alt+O分别选择Cle
21、an和Copy菜单项。,任何一个控件(菜单项也是控件),只要它有Caption(标题)属性,就可以为其指定访问键。也就是说,访问键是对控件的Caption属性设置的。对于一般控件(即非菜单项),可以在设计阶段通过属性窗口在Caption属性中加“&”设置访问键,也可以在程序代码中设置。但是,有些控件没有Caption属性,或者Caption属性被设置为空白,对于这样的控件,可以通过Tab键依照空位顺序选取,但也可以通过访问键选取。假定有一个文本框(或图片框),框内为空白,则可用下列方法设置访问键:(1)建立一个标签,在标签后紧接着建立一个文本框,即让文本框紧跟在标签的后面。(2)标签有Capt
22、ion属性,因此可以对标签设置访问键。当用访问键选取标签时,由于标签不接收输入,因而把控件转移到位于其后的文本框。,注意,访问键只能是一个字符,而且这个字符必须是键盘上的某个键,否则没有实际意义。因此,通常用键盘上有的西文字符作为访问键。如果用汉字作为菜单项或控件的标题,则通常把访问键放在标题后面的括号中。例如:清除(&C),11.5 菜单项的增减 用前面的方法建立的菜单是固定的,菜单项不能自动增减。为了增加或减少菜单项,必须打开菜单设计窗口,对原来的菜单进行增删。在Word的“窗口”菜单中,其子菜单可以根据当前打开文件的多少而动态变化。也就是说,每打开一个文件,在“窗口”菜单中就增加一个子菜
23、单项。每关闭一个文件,“窗口”菜单中就减少一个子菜单项。在实际应用中,有时候需要这种自动增减菜单项的操作。下面就介绍如何实现这种操作。菜单项的增减通过控件数组来实现。一个控件数组含有若干个控件,这些控件的名称相同,所使用的事件过程相同,但其中的每个元素可以有自己的属性。和普通数组一样,通过下标(Index)访问控件数组中的元素。控件数组可以在设计阶段建立,也可以在运行时建立。利用控件数组,可以实现菜单项增减。,11.6弹出式菜单 前面较为详细地介绍了下拉式菜单的功能和建立方法。在实际应用中,除下拉式菜单外,Windows还广泛使用弹出式菜单,几乎在每一个对象上单击鼠标右键都可以显示一个弹出式菜
24、单。弹出式菜单是一种小型的菜单,它可以在窗体的某个地方显示出来,对程序事件作出响应。通常用于对窗体中某个特定区域有关的操作或选项进行控制,例如用来改变某个文本区的字体属性等。与下拉式菜单不同,弹出式菜单不需要在窗口顶部下拉打开,而是通过单击鼠标右键在窗口(窗体)的任意位置打开,因而使用方便,具有较大的灵活性。建立弹出式菜单通常分两步进行:首先用菜单编辑器建立菜单,然后用PopupMenu方法弹出显示。第一步的操作与前面介绍的基本相同,唯一的区别是,必须把菜单名(即主菜单项)的“可见”属性设置为False(子菜单项不需要设置为False)。,PopupMenu方法用来显示弹出式菜单,其格式为:对
25、象.PopupMenu 菜单名,X,Y,BoldCommand 其中“对象”是窗体名;“菜单名”是在菜单编辑器中定义的主菜单项名;X、Y是弹出式菜单在窗体上的显示位置(与Flags参数配合使用,见后);BoldCommand用来在弹出式菜单中显示一个菜单控制;Flags参数是一个数值或符号常量,用来指定弹出式菜单的位置及行为,其取值分为两组,一组用于指定菜单位置,另一组用于定义特殊的菜单行为,见表11.7和表11.8。,说明:(1)PopupMenu方法有六个参数,除“菜单名”外,其余参数均是可选的,当省略“对象”时,弹出式菜单只能在当前窗体中显示。如果需要弹出式菜单在其他窗体中显示,则必须加
26、上窗体名。(2)Flags的两组参数可以单独使用,也可以联合使用。当联合使用时,每组中取一个值,两个值相加;如果使用符号常量,则两个值用Or 连接。(3)X和Y分别用来指定弹出式菜单显示位置的横坐标和纵坐标,如果省略,则弹出式菜单在鼠标光标的当前位置显示。,(4)弹出式菜单的“位置”由X、Y及Flags参数共同指定。如果省略这几个参数,则在单击鼠标右键弹出菜单时,鼠标光标所在位置为弹出式菜单左上角的坐标。在默认情况下,以窗体的左上角为坐标原点。如果省略Flags参数,不省略X、Y参数,则X、Y为弹出式菜单左上角的坐标;如果同时使用X、Y及Flags参数,则弹出式菜单的位置分为以下几种情况:Fl
27、ags0 X、Y为弹出式菜单左上角的坐标 Flags4 X、Y为弹出式菜单顶边中间的坐标 Flags8 X、Y为弹出式菜单右上角的坐标(5)为了显示弹出式菜单,通常把PopupMenu方法放在MouseDown事件中,该事件响应所有的鼠标单击操作。按照惯例,一般通过单击鼠标右键显示出弹出式菜单,这可以用Button参数来实现。对于两个键的鼠标来说,左键的Button参数值为1,右键的Button参数值为2。因此,可以用下面的语句强制通过单击鼠标右键来响应MouseDown,事件、显示弹出式菜单:If Button2 Then PopupMenu 菜单名下面通过一个例子来具体说明建立弹出式菜单的
28、一般过程。例11.4 建立一个弹出式菜单,用来改变文本框中字体的属性。(1)执行“文件”菜单中的“新建工程”命令,建立一个新的工程。(2)执行各菜单项的属性,如表:,(3)执行“工具”菜单中的“菜单编辑器”命令,进入菜单编辑器窗口。(4)按设置的属性建立菜单,注意:主菜单的popFormat的“可见性”设置为False,其余的菜单项的“可见性”设置为True.建立弹出式菜单如下:,编写程序代码如下:,Private Sub Form_Load()窗体事件过程Text1.Text=可视化高级程序设计语言End SubPrivate Sub Form_MouseDown(Button As Int
29、eger,Shift As Integer,X As Single,Y As Single)窗体的MouseDown事件过程 If Button=2 ThenPopupMenu popformatEnd IfEnd SubPrivate Sub font20_Click()以下对各子菜单项编写事件过程Text1.FontSize=20End SubPrivate Sub fontls_Click()Text1.FontName=隶书End Sub,Private Sub popbold_Click()Text1.FontBold=TrueEnd SubPrivate Sub popitalic_Click()Text1.FontItalic=TrueEnd SubPrivate Sub popunder_Click()Text1.FontUnderline=TrueEnd SubPrivate Sub quit_Click()EndEnd Sub,运行结果如图,