菜单程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
菜单程序设计
菜单程序设计2010年12月05日星期日下午09:52菜单程序设计
一、菜单
菜单的基本作用:
菜单的基本类型:
几个常用术语:
--菜单条出现在窗体标题的下面,包含每个菜单的标题。
--菜单包含命令列表或子菜单名。
--菜单中列出的每一项。
--从某个菜单项分支出来的另外的一个菜单。
具有子菜单的菜单项右边带有一个三角符号标志。
--分隔条是在菜单项之间的一条水平直线,用于修饰菜单。
--弹出式菜单是另一种形式的菜单,在按下鼠标右键时出现,它是一个上下文相关的菜单。
使用菜单编辑器可以为应用程序创建自定义菜单并定义其属性,利用这个编辑器,可以建立下拉式菜单,最多可达6层。
启动菜单编辑器的方法有4种(先选中一个窗体,使之为活动窗体):
使用菜单"工具"/"菜单编辑器";
启动后,弹出菜单设计窗口。
菜单编辑器窗口分为三个部分:数据区、编辑区和菜单项显示区。
1、数据区
用来输入或修改菜单项、设置属性。
其中:
隔线。
可在该文本框中输入数值,这个值用来在帮助文件(用HelpFile属性设置)中查找相应的帮助主题。
用来确定菜单或菜单项是否出现或在什么位置出现。
该列表有4个选项:
0-None菜单项不显示
2、编辑区
共有7个按钮。
3、菜单项显示区(菜单列表)
位于菜单设计窗口的下部,输入的菜单项在这里显示出来,并通过内缩符号(…)表明菜单项的层次。
条形光标所在的菜单项是"当前菜单项"。
说明:
菜单项是一个总的名称,包括4个方面的内容:菜单名(菜单标题)、菜单命令、分隔线和子菜单。
内缩符号由4个点组成,它表明菜单项所在的层次,一个内缩符号(4个点)表示一层,两个内缩符号(8个点)表示两层…最多20个点,即5个内缩符号,它后面的菜单项为第六层。
如果一个菜单项前面没有内缩符号,则该菜单为菜单名,即菜单的第一层。
隔线。
下面通过一个简单的例子说明菜单程序设计的基本方法和步骤。
例1
根据题意,可以将菜单分为3个主菜单项,分别为"计算加、减"、"计算乘、除"和"清除与退出",它们各有两个子菜单,即:
"计算加、减"的子菜单项:加、减
"计算乘、除"的子菜单项:乘、除
"清除与退出"的子菜单项:清除、退出
另外,为了输入和显示,再建立两个文本框(输入数据)和四个标签。
1、界面:
其中Lable4的BorderStyle属性设置为1。
2、菜单项属性:
3、设计菜单:
步骤:
其它两个主菜单的建立与前面步骤类似,不再重复。
设计完成后的窗口如
下图。
"确定"后结束。
设计完成后,窗体顶行显示主菜单项,单击某个主菜单项,即可下拉显示
其子菜单。
4、程序代码:
每个菜单项都可以接收Click事件。
每个菜单项都有一个名字(Name属性),将这个名字与Click放在一起,组成Click事件过程。
Option Explicit Private Sub Add_Click()
x=Val(Text1.Text)+Val(Text2.Text)
End Sub Private Sub Min_Click()
x=Val(Text1.Text)-Val(Text2.Text)
Private Sub Mul_Click()
x=Val(Text1.Text)*Val(Text2.Text)
Private Sub Div_Click()
If Text2.Text="0"Or Text2.Text=""Then End Sub Private Sub
Clean_Click()
Text1.Text=""
End Sub Private Sub Quit_Click()
5、运行程序:
在两个文本框中输入数字后,分别单击各菜单项或热键,看一看执行结果。
本例中的"有效"属性和"可见"属性采用默认的"True",只有在必要时才设
置其它属性。
下面将讨论这些情况。
在使用Windows或VB菜单时,已见过"与众不同"的菜单项,如有的呈灰色,单击这类菜单项不执行任何操作;有的菜单项前有"√"号,或菜单项的某个字
母下面有下划线等等。
下面将介绍如何在菜单中增加这些属性。
1、菜单项的有效属性(有效性控制)
为了使程序正常运行,有时需要使某些菜单项失效,以防止出现误操作。
例如前面的例子中,只有在文本框中输入数字后才能进行运算,否则运算没有
意义。
因此,如果尚未输入数据,则应使执行加、减、乘、除的菜单项失效,
在输入数据后才生效。
为此,可增加下面两个事件过程:
Private Sub Text1_Change()
If Text1.Text=""Then End Sub Private Sub Text2_Change()
If Text2.Text=""Then End Sub
除增加上述两个事件过程外,还要
方法:打开"菜单编辑器"窗口,把对应于这4个菜单项的数据区中的"有效"属性复选框中的"√"去掉即可。
2、菜单项的复选属性(菜单项的标记)
所谓菜单项标记,就是在菜单项前加上一个"√"。
它有两个作用:
增加方法:
一般来说,菜单项标记通常是动态的加上或取消的,所以,程序代码中根据执行情况设置。
例2
界面:
一个文本框、6个标签。
菜单属性:
设计菜单:
编写代码:
Option Explicit Private Sub octv_Click()
answer=Val(Text1.Text)
Private Sub Hexv_Click()
answer=Val(Text1.Text)
Private Sub dec_Click()
answer=Val(Text1.Text)
End Sub Private Sub Clean_Click()
Text1.Text=""
End Sub Private Sub Quit_Click()
End End Sub
例3
在窗体上添加一个文本框,用来输入要显示的文本。
菜单属性:
菜单设置见教材P244。
代码如下:
Private Sub Form_Load()
Private Sub mnunew_Click()'菜单项的单击事件Private Sub mnuopen_Click()
Private Sub mnuclose_Click()
Private Sub mnuexit_Click()
Private Sub mnubold_Click()
Private Sub mnuitalic_Click()
3、菜单的可见属性
同"有效"属性相似,可以利用"可见"属性来取消用户对某些特定菜单项的访问权限。
若关闭某个特定的菜单项的"可见"属性,该菜单项将从菜单中被移走。
用户将不知道该菜单项的存在。
例4
打开菜单编辑器,在菜单列表中选择[退出]菜单项,单击"插入"按钮,在[退出]菜单项之前插入一个菜单项。
4、设置键盘选择菜单项
在一般情况下,菜单项通过鼠标选择,即单击某个菜单项,执行相应的操作。
在VB中,也可以通过键盘选择所需的菜单项。
用键盘选择有两种方法:
前面已介绍过热键的设置方法。
用热键可以直接执行菜单命令,不必一级一级地下拉菜单,速度较快,适合熟悉键盘的用户使用。
所谓访问键,就是菜单项中加了下划线的字母,只要按Alt和加了下划线的字母,就可以选择相应的菜单项。
用访问键选择菜单项时,必须一级一级地选择。
也就是只有在下拉显示下一级菜单后,才能用Alt和加了下划线的字母键选择。
访问键的设置
说明:
任何
5、创建菜单控件数组
菜单控件数组就是在同一菜单上共享相同名称和事件过程的菜单工程的集合。
菜单控件数组用于:
在运行时要创建一个新菜单项,它必须是菜单控件数组中的成员
每个菜单控件数组元素都由惟一的索引值来标识,该值在菜单编辑器上"Index属性框"中指定。
当一个控件数组成员识别一个事件时,VB将其Index 属性作为一个附加的参数传递给事件过程。
事件过程必须包含有核对Index属性的代码,因而可以判断出正在使用的是哪一个控件。
例5:
菜单项名称索引快捷键
mnuFont
.粗体粗体mnuBold Ctrl+B
.斜体斜体mnuItalic Ctrl+I
.大小大小mnuSize 10mnuFS 20mnuFS 30mnuFS
通过菜单编辑器中创建菜单控件数组的步骤:
同样,所有的控件也可以用这种方法创建控件数组。
通常把OptionButton 和CheckBox控件设置为控件数组。
使用菜单数组和控件数组有下述优点:
可以用For循环方便的访问每一个对象
菜单控件数组mnuFS的Click事件响应代码如下:
Private Sub mnuFS_Click(Index as Integer)
Select Case Index end sub 6、菜单项的增减(动态菜单)
动态菜单是指随着应用程序的运行而不断改变的一种菜单,在运行时菜单可以增长。
Word软件的"文件"菜单是一个典型的动态菜单,菜单中列出了最近使用过的文件名,这部分内容随着应用程序的运行而不断改变的。
而用前面的方法建立的菜单是固定的,菜单项不能增减。
为了增加或减少菜单项,必须在"菜单编辑器"窗口中,对原来的菜单进行增删。
使用动态菜单在应用程序中
一个控件数组含有若干个控件,这些控件的名称相同,所使用的事件过程
相同,但其中的每个元素可以有自己的属性。
和普通数组一样,通过下标(Index)访问控件数组中的元素。
控件数组可以在设计阶段建立(见添加控件一节),也可以在程序运行阶段建立。
菜单项的增减是通过菜单控件数组实现的。
菜单控件数组和普通数组一样,也是通过下标来访问数组中的元素(这里为菜单项)的。
菜单控件数组也一样可
以设计时建立、可以在运行时建立。
具体操作:如设计时对名称为mnuRecentFile的分隔条菜单控件的Index
属性进行了赋值,它自动地成为控件数组的一个元素,当创建
mnuRecentFile(0)时,实际上创建了一个在运行时不可见的分隔符条。
当运行
时用户第一次存储一个文件,这个分隔条就会变得可见,且第一个文件名被加
到该菜单上。
运行时每存储一个文件,则会再装入一个菜单项到该数组中,从
而使该菜单增长(当然,菜单也不能无限增长)。
运行时创建的控件可以使用
Hide方法或者设置该控件的Visible属性为False来隐藏。
当用户选取一个菜
单控件时,一个Click事件则出现。
需要在代码中为每个菜单控件编写一个
Click事件过程(除分隔符条以外的所有菜单控件都能识别Click事件)。
在菜
单事件过程中编写的代码与在控件任何其它过程中编写的代码完全相同。
一旦
菜单标题被选取,VB将自动地显示一个菜单。
例5
在[字体不可见]后插入一个菜单项,标题"-",名称:"mnuRecentFile","
可见"属性值为:
在"新建"文件的程序代码中作如下修改(蓝色部分是增加的内容):
Private Sub Form_Load()
End Sub Private Sub mnuopen_Click()
关于函数Mid$、Len:
★中部截取函数Mid$
功能:用来截取字符串中间的一比部分。
格式:Mid$(字符串,p,n)
a$="abcdefghijk"
cdef Mid$函数的第三个自变量可以省略,在这种情况下,将从第二个自变量指定的位置向后截取到字符串的末尾。
★字符串长度测试函数Len
功能:测试字符串的长度,也可以测试变量的存储空间,它的自变量可以
是字符串,也可以是变量名。
Len(变量名)例如:
a$="abcdefghijk"
11 a=Len(textvar#)
8 42
例5
设有一个刚刚建立的菜单,它有一个主菜单"应用程序",其下有两个子菜单"增加应用程序"、"减少应用程序"及分隔线。
要求单击"增加应用程序"时在
分隔条下增加一个新的菜单项,单击"减少应用程序"时删除分隔线下面一个指
定的菜单项,如果单击新增加的菜单项,则可以执行这一指定的应用程序。
原来菜单:
接下来,按以下步骤操作:
(1)打开菜单编辑器
(2)设置菜单属性如下:
最后一项是新输入的,它是一个子菜单,但暂时看不见。
输入"索引"值0
以使"AppName"菜单项成为菜单控件数组,AppName(0)是控件数组的第一个元素。
(3)编写添加菜单项代码:
单击"增加应用程序"菜单项,在程序中添加代码:
Dim menucounter As Integer msg="Enter file path:"
End Sub
以上仅是一个练习,在实际应用时,可以通过"通用对话框"打开文件,然后再将打开的文件名作为菜单项显示,这样代码可改为(窗体上已添加了通用对话框控件):
Private Sub AddAp_Click()
With CommonDialog1 menucounter=menucounter+1 End Sub
(4)编写删除菜单项代码:
在运行时用load语句增加的菜单项可以使用Unload语句删除,但不能删除设计时建立的菜单项。
单击"减少应用程序"菜单项,在程序中添加代码:
Private Sub DelAp_Click()
Dim n,i As Integer End Sub
说明:从过程中可以看出,删除指定菜单项的操作并不是直接进行的,而是从被删除的菜单项开始,用后面的菜单项覆盖前面的菜单项,然后再删除最后一个菜单项。
功能:
设计分为两步:首先用菜单编辑器建立菜单,这一步与前面介绍的基本相同,唯一的区别是,必须把菜单名(即主菜单项)的可见属性设置为False(子菜单项不要设置为False);第二步用PopupMenu方法弹出显示。
PopupMenu方法用来显示弹出菜单,
object.PopupMenu menuname,flags,x,y,boldcommand
其中:
Object(对象)--窗体名。
Menuname(菜单名)--指在菜单编辑器中定义的
X、Y--弹出式菜单在窗体上的显示位置的X、Y坐标(与Flags参数配合使用)。
Boldcommand--指定弹出式菜中的弹出式菜单控件的名字,用以显示为黑体正文标题。
Flags--该参数是一个数值或符号常量,指定弹出式菜单的位置和行为,其取值分为两组,一组用来指定菜单位置,另一组用来定义特殊的菜单行为,如
下表:
指定菜单位置
定义菜单行为
说明:
PopupMenu方法的6个参数中,除"菜单名"外,其余参数都是可选的。
当
省略了"对象"时,弹出式菜单只能在当前窗体中显示。
如果需要在其它窗体中
显示弹出菜单,则必须加上窗体名。
Flags的两组参数可以单独使用,也可以联合使用。
当联合使用时,每组
中取一个值,两个值相加;如果使用符号常量,则两个值用Or连接。
X、Y分别用来指定弹出式菜单显示位置的横、纵坐标,如果省略,则弹出
菜单在鼠标光标的当前位置显示。
弹出式菜单的"位置"由X、Y、Flags参数共同指定。
如果省略这几个参数,则在单击鼠标右键弹出菜单时,鼠标光标所在位置为弹出式菜单左上角的坐标。
在默认情况下,以窗体的左上角为坐标原点。
如果只省略Flags参数,不省略X、Y参数,则X、Y为弹出式菜单左上角的坐标;如果同时使用X、Y及Flags
参数,则弹出菜单的位置分为一下几种情况:
Flags=0 X、Y为弹出式菜单左上角的坐标
Flags=4 X、Y为弹出式菜单顶边中间的坐标
Flags=8 X、Y为弹出式菜单右上角的坐标
PopupMenu方法放在MouseDown事件中,该事件响应所有的鼠标单击操作。
按照惯例,一般通过单击鼠标右键显示弹出菜单,这可以用Button参数来实现。
对于两个键的鼠标来说,左键的Button参数值为1,右键的Button参数值为2。
因此可以强制使用右键来响应MouseDown事件而显示弹出菜单:
If Button=2 Then PopupMenu菜单名
下面举例说明建立弹出式菜单的一般过程。
例6
步骤如下:
Private Sub Form_MouseDown(Button As Integer,Shift As Integer,X
As Single,Y As Single)
If Button=2 Then End Sub Private Sub Form_Load()Text1.Text="可视
化高级程序语言"End Sub
因为主菜单不可见,所以不能直接下拉主菜单而单击子菜单进入代码窗口,必须先进入代码窗口(按F7键或双击窗体或执行"视图"菜单下的"代码窗口"命令),然后分别从"对象名称"框和"事件名称"框中选择对应项,然后分别编写代码。
Private Sub popBold_Click()
Private Sub Quit_Click()
运行结果:
工具栏(也称为发条或者控制栏)已经成为许多基于Windows的应用程序的标准功能。
工具栏提供了对于应用程序中最常用的菜单命令的快速访问。
可以使用ToolBar控件来轻松的创建工具栏,也可以使用应用程序向导来创建工具栏,方法更加简便。
1、利用应用程序向导创建工具栏
应用程序向导是VB6.0为用户提供的一项功能,通过应用程序向导用户可以很快设计出一个标准Windows程序的框架,其中包括窗体、菜单、工具栏、多文档、状态栏、对话框、滚动条等等。
设计过程是在对话中完成,设计完成后形成应用程序的界面和框架。
创建一个标准的应用程序框架步骤如下:
2、使用ToolBar控件创建工具栏使用ToolBar控件创建工具栏也是非常简单的工作,基本的属性设置可以通过对话框完成。
给示例Mymenu设计一个具有四个工具按钮的工具栏,分别对应菜单中的"新建"、"打开"、"粗体"、"斜体"等四个菜单项,并完成相应的功能。
关于"样式"的说明:
Private Sub Toolbar1_ButtonClick(ByVal Button As
MSComctlLib.Button)
Select Case Button.Index End Sub Private Sub mnuBold_Click()
mnuBold.Checked=Not mnuBold.Checked End Sub Private Sub mnufotesize_Click(Index As Integer)
Select Case Index End Sub Private Sub mnuItalic_Click()
mnuItalic.Checked=Not
mnuItalic.CheckedText1.FontItalic=mnuItalic.Checked End Sub Private Sub mnuNew_Click()
Form1.Caption="新文件"
Private Sub mnuOpen_Click()
Form1.Caption="文件"
3、利用ImageList控件在工具按钮上显示图像
在创建ToolBar控件之前,应创建一个ImageList控件并添加你想要的图像。
ImageList控件包含ListImage对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。
ImageList控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。
如工具栏控件(ToolBar)中的图像就是从ImageList控件中获取的。
在窗体上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择"属性"命令,打开如图所示"属性页"对话框,选择其中的"图像"选项卡。
单击"插入图片"按钮,插入你想要的图片,如下图有3张图片。
其中的"索引"和"关键字"(可选)属性用来引用每张图片。
"关键字"属性是唯一的字符串,用来识别图片。
使用"关键字"属性一般比使用"索引"要好,因为当插入或删除图片时,索引会发生改变而关键字不会改变。
右键单击Toolbar控件,选择"属性"命令打开如图所示的Toolbar控件"属性页"对话框,选择"通用"选项卡,在"图像列表"处选择ImageList控件名"ImageList1"。
选择"按钮"标签,在"图像"一栏中设置。
你可以用两种方法来把按钮与ImageList中的某个图片相连:把按钮的"图像"属性设置为图片的"索引"数或图片的"关键字"属性(注意"关键字"属性是区分大小写的)。
特别声明:
1:资料来源于互联网,版权归属原作者
2:资料内容属于网络意见,与本账号立场无关
3:如有侵权,请告知,立即删除。