第10章菜单与工具栏.docx
《第10章菜单与工具栏.docx》由会员分享,可在线阅读,更多相关《第10章菜单与工具栏.docx(26页珍藏版)》请在冰豆网上搜索。
第10章菜单与工具栏
第10章菜单与工具栏
10.1使用菜单
如果应用程序要为用户提供一组命令,菜单提供一种方便的给命令分组的方法,并使用户容易访问这些命令。
10.1.1下拉式菜单
下拉式菜单的组成情况如图所示。
菜单栏——在窗体的标题栏下面,并包含一个或多个菜单标题。
菜单标题——菜单显示的名称(如“文件”),也称为主菜单。
当单击一个菜单标题时,包含菜单项目的列表就被拉下来。
菜单项——即可菜单命令,可以包括命令(如“新建”和“退出”)、分隔条、和子菜单标题。
◇用户看到的每个菜单项和在“菜单编辑器”中定义的一个菜单控件对应。
◇菜单控件是一个对象,与其它对象一样,它具有定义它的外观与行为的属性。
在设计或运行时可以设置Caption属性、Enabled和Visible属性、Checked属性以及其它属性。
◇菜单控件只包含一个事件,即Click事件,当用鼠标或键盘选中该菜单控件时,将调用该事件。
1.菜单的设计——菜单编辑器
在VB中用菜单编辑器可以方便地创建新的菜单和菜单栏、在已有的菜单上增加新命令、用自己的命令来替换已有的菜单命令、以及修改和删除已有的菜单和菜单栏。
⑴进入菜单编辑器的途径
◆
从“工具”菜单上,选取“菜单编辑器”;
◆或者在“工具栏”上单击“菜单编辑器”按钮;
◆或者在窗体上单击右键,在随后弹出的快捷菜单中选择“菜单编辑器”命令;
◆还可以按热键“Ctrl+E”,都会出现如上图所示的窗口,菜单设计将通过这个窗口来完成。
⑵菜单控属性的设置
大多数菜单控件属性可用菜单编辑器设置,所有的菜单属性在“属性”窗口中也都是可用的。
其中在菜单设计中最主要的属性是:
Name——名称,这是代码中用来引用菜单控件的名字。
Caption——标题,这是出现在控件上的文本。
⑷在菜单编辑器中创建菜单控件的步骤:
①选取该窗体。
②从“工具”菜单中,选取“菜单编辑器”,或者在“工具栏”上单击“菜单编辑器”按钮进入菜单编辑器。
③在“标题”文本框中,为第一个菜单标题键入希望在菜单栏上显示的文本。
如果希望某一字符成为该菜单项的访问键,也可以在该字符前面加上一个(&)字符。
在菜单中,这一字符会自动加上一条下划线,操作时同时按Alt键和带有下划线的字母可选择这个菜单项。
菜单标题文本显示在菜单控件列表框中。
④在“名称”文本框中,键入将用来在代码中引用该菜单控件的名字。
⑤单击向左或向右箭头按钮(→,←),可以改变该控件的缩进级(菜单级)。
⑥如果需要的话,还可以设置控件的其他属性。
这一工作可以在菜单编辑器做或以后在“属性”窗口中做。
⑦选取下一个(Next)就可以再建一个菜单项(控件)。
或者:
单击插入(Insert)可以在现有的控件之间增加一个菜单项(控件)
⑧也可以单击向上与向下的箭头按钮,在现有菜单控件之中移动控件。
如果窗体所有的菜单控件都已创建,选取“确定”可关闭菜单编辑器。
创建的菜单标题将显示在窗体上。
在设计时,单击一个菜单标题可下拉其相应的菜单项。
⑸
在菜单编辑器中创建分隔符条的步骤
①如果想在一现有菜单中增加一个分隔符条,选取“插入”,在想要分隔开来的菜单项之间插入一个菜单控件。
②如有必要,单击右箭头按钮使新菜单项缩进到与它要隔开的菜单项同级。
③在“标题”文本框中键入一个连字符”-“。
④设置“名称”属性。
注意:
虽然分隔符条是当作菜单控件来创建的,它们却不能响应Click事件,而且也不能被选取。
⑹菜单设计中的一些编辑操作
在菜单设计过程中,经常需要对菜单控件进行一些编辑操作或设置其它一些属性。
①快捷键(Shortcut)下拉列表:
在此列表框中列出了很多快捷键供用户为相应的菜单项选择一个快捷键,选择之后快捷键会显示在菜单标题的右边。
当然也可以不选择快捷键。
②删除(Delete)按钮:
删除选定的菜单项。
③复选(Checked)检查框:
为选择的菜单项标记“√”,表示该菜单项是一个选项。
④有效(Enabled)检查框:
决定该菜单项是否为可选(有效)项。
⑤可见(Visible)检查框:
决定该菜单项是否可见。
2.菜单设计示例(p210-1.vbp)
编写完成加、减、乘、除运算的程序。
⑴建立控件
在窗体上安放6个控件,其属性如下表:
默认控件名
Name
Caption
Text
Borderstyle
Label1
lblInput1
操作数1
无定义
缺省
Label2
lblInput2
操作数2
无定义
缺省
Label3
lblResult
计算机结果
无定义
缺省
Label4
lblDisplayResult
空白
无定义
1-FixedSingle
Text1
txtNo1
无定义
空白
缺省
Text2
txtNo2
无定义
空白
缺省
⑵设计菜单
进入菜单编辑器完成菜单设计,各菜单项的属性如下表:
菜单项
名称
快捷键
计算1
Cal1
…加法
Add
Ctrl+A
…减法
Sub
Ctrl+B
计算2
Cal2
…乘法
Mul
Ctrl+C
…除法
Div
Ctrl+D
…清除
Clean
Ctrl+E
当完成所有菜单设计的输入工作后,菜单设计窗口如左图所示,这时选择“确定”命令,就完成了整个菜单的建立工作。
菜单运行情况如下图所示。
⑶编写事件过程
在窗体上分别点击菜单项,为各菜单项编写相应的事件过程:
PrivateSubAdd_Click()‘加法事件过程
x=Val(txtNo1.Text)+Val(txtNo2.Text)
lblDisplayResult.Caption=Str(x)
EndSub
PrivateSubSub_Click()‘减法事件过程
x=Val(txtNo1.Text)-Val(txtNo2.Text)
lblDisplayResult.Caption=Str(x)
EndSub
PrivateSubDiv_Click()‘除法事件过程
x=Val(txtNo1.Text)/Val(txtNo2.Text)
lblDisplayResult.Caption=Str(x)
EndSub
PrivateSubMul_Click()‘乘法事件过程
x=Val(txtNo1.Text)*Val(txtNo2.Text)
lblDisplayResult.Caption=Str(x)
EndSub
PrivateSubClean_Click()‘清除事件过程
txtNo1.Text=""
txtNo2.Text=""
lblDisplayResult.Caption=""
txtNo1.SetFocus‘控制权转移到txtNo1文本框上
EndSub
PrivateSubQuit_Click()‘结束事件过程
End
EndSub
3.菜单控件数组
菜单控件数组就是在同一菜单上共享相同名称和事件过程的菜单项目的集合。
菜单控件数组使用于:
∙在运行时要创建一个新菜单项,它必须是控件数组中的成员。
∙简化代码,因为通用代码块可以被所有菜单项使用。
每个菜单控件数组元素都由唯一的索引值来标识,该值在菜单编辑器上“Index属性框”中指定。
当一个控件数组成员识别一个事件时,VisualBasic将其Index属性值作为一个附加的参数传递给事件过程。
事件过程必须包含有核对Index属性值的代码,因而可以判断出正在使用的是哪一个控件。
菜单编辑器中创建菜单控件数组的步骤:
⑴选取窗体。
⑵从“工具”菜单中,选取“菜单编辑器”。
或在“工具栏”上单击“菜单编辑器”按钮。
⑶在“标题”文本框中,键入想出现在菜单栏中的第一个菜单标题的文本。
菜单标题文本显示在菜单控件列表框中。
⑷在“名称”文本框中,键入将在代码中用来引用菜单控件的名称(不能与下面的菜单控件数组同名)。
保持“索引”框是空的。
⑸在下一个缩进级,通过设定“标题”和“名称”来创建将成为数组中第一个元素的菜单项。
⑹将数组中第一个元素的“索引”设置为0。
⑺在第一个的同一缩进级上创建第二个菜单项。
⑻将第二个元素的“名称”设置成与第一个元素相同,且把它的“索引”设置为1。
⑼对于数组中的后续元素重复步骤⑸–⑻。
注意:
菜单控件数组的各元素在菜单控件列表框中必须是连续的,而且必须在同一缩进级上。
创建菜单控件数组时,要把在菜单中出现的分隔符条也包括进去。
[例10-2](p213-1.vbp)文本编辑器。
对[例9-2]进行修改。
⑴将公共对话框控件移至窗体上,删去图片框及上面的按钮
⑵打开菜单编辑器,按P213表10-4设置菜单项,注意Index的设置,这里建立了两个菜单项数组。
标题(Caption)
名称(Name)
索引(Index)
文件(&F)
Files
……新建(&N)
File
0
……打开(&O)
File
1
……保存(&S)
File
2
……另存(&A)
File
3
……关闭(&X)
File
4
编辑(&E)
Edit
……剪切
Edi
0
……复制
Edi
1
……粘贴
Edi
2
……删除
Edi
3
⑶菜单项数组File的Click的事件过程可直接用[例9-2]的事件过程。
编写菜单项数组Edi的Click事件过程:
PrivateSubEdi_Click(IndexAsInteger)
SelectCaseIndex
Case0'剪切
Clipboard.SetTexttxtNoteEdit.SelText‘将文本框中的文本放入系统剪贴板
txtNoteEdit.SelText=""
Case1'复制
Clipboard.SetTexttxtNoteEdit.SelText
Case2'粘贴
txtNoteEdit.SelText=Clipboard.GetText()‘把系统剪贴板中的内容赋值给文本框
Case3'删除
txtNoteEdit.SelText=""
EndSelect
EndSub
4.菜单项的可用与不可用
利用菜单项的Visible属性,可以控制菜单项可用或不可用。
[例10-3](p214-1.vbp)对上例进行改进,当选中文本时,编辑操作可用,否则不能用。
在上例基础上增加一个主菜单项Edit的Click事件过程:
PrivateSubEdit_Click()
Edi(0).Enabled=IIf(txtNoteEdit.SelLength=0,False,True)
Edi
(1).Enabled=IIf(txtNoteEdit.SelLength=0,False,True)
Edi(3).Enabled=IIf(txtNoteEdit.SelLength=0,False,True)
EndSub
10.1.2弹出菜单
弹出式菜单——即快捷菜单,是独立于菜单栏而显示在窗体上的浮动菜单。
在弹出式菜单上显示的项目取决于按下鼠标右键时指针所处的位置;因而,弹出式菜单也被称为上下文菜单。
在MicrosoftWindows98/2000中,可以通过单击鼠标右键来激活上下文菜单。
在运行时,至少含有一个菜单项的任何菜单都可以作为弹出式菜单被显示。
为了显示弹出式菜单,可使用PopupMenu方法。
这个方法使用的语法格式如下:
object.PopupMenumenuname,flags,x,y,boldcommand
o
bject:
可选的。
一个对象表达式,其值为列表中的一个对象。
如果省略object,则带有焦点的Form对象缺省为object。
menuname:
必需的。
要显示的弹出式菜单名。
指定的菜单必须含有至少一个子菜单。
也可以是菜单控件数组的上层菜单名
flags:
可选的。
一个数值或常数,用以指定弹出式菜单的位置和行为。
x:
可选的。
指定显示弹出式菜单的x坐标。
如果该参数省略,则使用鼠标的坐标。
y:
可选的。
指定显示弹出式菜单的y坐标。
如果该参数省略,则使用鼠标的坐标。
boldcommand:
可选的。
指定弹出式菜单中的菜单控件的名字,用以显示其黑体正文标题。
如果该参数省略,则弹出式菜单中没有以黑体字出现的控件。
影响弹出菜单位置的Flags设置值有:
常数位置
值
描述
VbPopupMenuLeftAlign
0
(缺省值)。
弹出式菜单的左边定位于x。
VbPopupMenuCenterAlign
4
弹出式菜单的于x居中位。
VbPopupMenuRightAlign
8
弹出式菜单的右边定位于x。
影响弹出菜单行为的flasg设置值有:
常数行为
值
描述
VbPopupMenuLeftButton
0
(缺省值)。
仅当使用鼠标左按钮时,弹出式菜单中的项目才响应鼠标单击。
VbPopupMenuRightButton
2
不论使用鼠标右按钮还是左按钮,弹出式菜单中的项目都响应鼠标单击。
例:
Pict的下级菜单是一个菜单数组Pic
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then
PopupMenuPict,2‘Pict的子菜单是菜单数组Pic
EndIf
EndSub
PrivateSubPic_Click(IndexAsInteger)
Cls
SelectCaseIndex
Case0
Line(2000,2000)-(4000,2000)
Case1
Line(100,100)-(3000,3000),,B
Case2
Me.Circle(2000,2000),1000
EndSelect
EndSub
例(P215-1.VBP)编写一个能完成四则运算的程序。
要求使用弹出式菜单。
PrivateSubAdd_Click()‘选择加命令过程
X=Val(txtNo1.Text)+Val(txtNo2.Text)
lblDisplayResult.Caption=Str(X)
EndSub
PrivateSubClean_Click()‘选择清除过程
txtNo1.Text=""
txtNo2.Text=""
lblDisplayResult.Caption=""
txtNo1.SetFocus
EndSub
PrivateSubDiv_Click()‘选择除法命令过程
X=Val(txtNo1.Text)/Val(txtNo2.Text)
lblDisplayResult.Caption=Str(X)
EndSub
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton=2Then‘单击鼠标右键
PopupMenuCal2,2‘弹出快捷菜单
EndIf
EndSub
PrivateSubMul_Click()‘选择乘法命令过程
X=Val(txtNo1.Text)*Val(txtNo2.Text)
lblDisplayResult.Caption=Str(X)
EndSub
PrivateSubQuit_Click()
End
EndSub
PrivateSubSub_Click()‘选择减法命令过程
X=Val(txtNo1.Text)-Val(txtNo2.Text)
lblDisplayResult.Caption=Str(X)
EndSub
注:
在VB的文本框中,即使不编写弹出菜单的程序,会自动生成一个含各种编辑操作的弹出菜单。
◇三种鼠标事件使用下列参数。
Button
一个位域参数,其中常用三位描述鼠标按钮的状态。
b0=1表示左键按下或释放;b1=1表示右键按下或释放;b2=1表示中键按下或释放。
Shift
一个位域参数,用三位描述SHIFT、CTRL与ALT键
的状态。
b0=1表示Shift键被按下;b1=1表示Ctrl键被按下;b2=1表示Alt键被按下。
x,y
鼠标指针的位置,这里用到了接受鼠标事件的对象的坐标系统描述的鼠标指针位置。
10.2使用工具栏
可以用工具栏进一步增强应用程序的菜单界面。
具栏提供了对于应用程序中最常用的菜单命令的快速访问。
使用ToolBar控件来创建工具栏非常容易且很方便,它在VisualBasic的专业版与企业版中是可用的。
10.2.1用手工方式制作工具栏
⑴在窗体上放置一个图片框。
图片框作为工具按钮的容器,使图片框的宽度会自动伸展,为此设置Align属性为非0,如Align=1,图片框会自动出现在窗体顶部,宽度随窗体变化,高由用户设置。
2图片框中,可以放置任何想在工具栏上显示的控件。
典型地,用CommandButton或Image控件来创建工具栏按钮。
要在图片框中添加控件,单击工具栏中的控件按钮,然后在图片框中画出它。
注意当窗体中包含了图片框时,该窗体的内部区域不包括图片框在内。
例如:
窗体的ScaleHeigh属性返回窗体的内部高度,这个高度已不包括图片框的高度。
3计时属性。
使用工具栏的一个好处是可以显示一个形象的命令图示。
Image控件是作为工具栏按钮的一个很好的选择,因为可以用它来显示一个位图。
在设计时设置其Picture属性来显示一个位图;这样,当该按钮被单击时,即能提供一个命令执行的可见信息。
也可以通过设置按钮的ToolTipText属性来使用工具提示,这样,当用户把鼠标指针保持在一个按钮上时,就可以显示出该工具栏按钮的名称。
4编写代码。
因为工具栏频繁地用于提供对其它命令的快捷访问,因而在大部分时间内都是从每一个按钮的Click事件中调用其它过程,比如对应的菜单命令。
[例10-3]为例10-3中的文本编辑器中增加一个自定义的工具栏。
⑴在窗体上增加控件:
图片框Picture1,按钮组Command1(0)-Command1
(2),复选组Check1(0)-Check
(2):
⑵设置属性:
对象
属性
属性值
说明
Picture1
Align
1-AlignTop
位于顶部
Command1()
Caption
清空
Style
1-Graphical
图形按钮
Picture
New.bmp,Open.bmp,Save.bmp
Check1()
Caption
清空
Style
1-Graphical
图形按钮
Picture
Bld.bmp,Itl.bmp,Undrln.mmp
⑶修改编写代码:
PrivateSubForm_Resize()'窗体大小改变事件,确保文本框随之改变大小
WithtxtNoteEdit
.Left=0
.Top=Picture1.Height
.Height=frmNoteEdit.ScaleHeight-Picture1.Height
.Width=frmNoteEdit.ScaleWidth
EndWith
EndSub
PrivateSubCommand1_Click(IndexAsInteger)‘按钮组的Click事件过程
File_Click(Index)
EndSub
PrivateSubCheck1_Click(IndexAsInteger)‘复选组的Click事件过程
SelectCaseIndex
Case0
txtNoteEdit.FontBold=NottxtNoteEdit.FontBold
Case1
txtNoteEdit.FontItalic=NottxtNoteEdit.FontItalic
Case2
txtNoteEdit.FontUnderline=NottxtNoteEdit.FontUnderline
EndSelect
EndSub
10.2.2使用Toolbar控件与ImageList控件
Toolbar控件(ActiveX控件)包含用来创建工具栏的Button对象的集合。
工具栏可与应用程序相关联。
在工具箱中添加ToolBar:
工程→部件→选择MicrosoftWindowsCommanContrl6.0
1.Toolbar控件简介
◇在工具箱中双击Toolbar控件或单击Toolbar后在窗体中画出该控件,Toolbar自动加入窗体并出现在窗体的顶部,并通过设置Align属性可以控制工具栏在窗体中的位置。
◇用鼠标右键单击窗体上的Toolbar控件,弹出Toolbar的属性页;或者选中窗体上的控件后在属性窗口选择Custom(自定义)右边的三点,也可以弹出Toolbar的属性页。
◇在General(通用)卡中的ImageList(图象列表)属性用来与ImageList控件建立关联。
窗体上若没有ImageList控件该列表为空。
◇在属性页的按钮(Button)卡中有以下各项:
⑴InsertButton(插入按钮)与RemoveButton(删除按钮):
在Button集合中添、删元素。
通过Button集合可以访问工具栏中的各个按钮。
一般情况下,工具栏中的按钮与应用菜单中的菜单项相对应,可以用它们来访问应用程序最常用的功能和命令。
⑵Index(索引)与Key(关键字):
Button集合中按钮的标识,其中Index为整型,Key为字符串型,访问按钮用Index或Key均可。
⑶Caption(标题)与Description(描述):
Caption是按钮上的文字,Description是按钮的说明信息。
⑷Value(值):
决定按钮的状态
0-tbrUnpressed(弹起状态)1-tbrPressed(按下状态)
⑸Style(样式):
决定按钮的行为特点,并将影响按钮的功能。
常数
值
用途
tbrDefault
0
如果按钮所代表的功能不依赖于其它功能,使用Default按钮样式。
例如,“保存文件”操作可以在任何时候进行。
另外,如果按钮被按下,在完成功能后它会自动地弹回。
tbrCheck
1
当按钮代表的功能是某种开关类型时,可使用Check样式。
例如,在使用RichTextBox