第7章 完善用户界面Word文档下载推荐.docx
《第7章 完善用户界面Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第7章 完善用户界面Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
设置菜单控件数组的下标,相当于控件数组的Index属性。
(4)快捷键(Shortcut):
可以在快捷键组合框中输入快捷键,也可以选取功能键、组合键来设置。
快捷键将自动出现在菜单上,要删除快捷键应选取列表顶部的“none”。
如为“新建”菜单创建快捷键Ctrl+N,在运行时按Ctrl+N键作为快捷键。
但在菜单条上的第一级菜单不能设置快捷键。
(5)帮助上下文件ID:
指定一个唯一的数值作为帮助文本的标识符,可根据该数值在帮助文件中查找合适的帮助主题。
(6)协调位置:
与OLE功能有关,一般取值为0。
(7)复选(Checked):
当该属性为True时,可以在相应的菜单项旁边加上记号“√”,表明该菜单项处于活动状态。
(8)有效(Enabled):
用来设置菜单项的操作状态。
如果该属性被设置为False,则相应的菜单项将会变“灰”,不响应用户事件。
(9)可见(Visible):
设置该菜单项是否可见。
如果该属性被设置为False,则相应的菜单项将被暂时从菜单中去掉,直到重新被设置为True。
(10)显示窗口列表(WindowsList):
用来设置在MDI应用程序中,菜单控件是否包含一个打开的MDI子窗体列表。
2.编辑区
编辑区共有7个按钮,用来对输入的菜单项进行简单的编辑。
(1)左、右箭头:
用来产生或取消内缩符号。
单击一次右箭头可以产生4个点(….),单击一次左箭头则删除4个点。
这4个点称为内缩符号,用来确定菜单的层次。
(2)上、下箭头:
用来在菜单项显示区中移动菜单项的位置。
把条形光标移到某个菜单项上,单击上箭头将使该菜单项上移,单击下箭头将使该菜单项下移。
(3)下一个:
用于进入下一个菜单项的设计。
(4)插入:
在光标所在处插入一个空白菜单项。
(5)删除:
删除光标所在处的菜单项。
3.菜单项显示区
位于菜单编辑器的下部,输入的菜单项在这里显示出来,并通过内缩符号表明菜单项的层次。
单击“确定”按钮,创建的菜单标题将显示在窗体上(见图7.1)。
菜单设计好后,还要为每个菜单项编写事件代码。
例如,关闭菜单项的代码为:
PrivateSubmnuFileQuit_Click()
UnloadMe
EndSub
【例7.1】设置一个程序,通过菜单让用户输入文字,然后在窗体上显示出来,并能通过菜单来改变字形是否为粗体、斜体或下划线。
首先,在窗体上添加一个标签Label1,用来显示用户输入的文字。
然后打开菜单编辑器,添加相应的菜单项,如表7.1所示。
表7.1改变字形菜单项
标题
名称
文件(&
F)
mnuFile
….输入(&
I)
mnuFile_Input
….-
mnuFile_Back
….退出(&
X)
mnuFile_Exit
字形(&
N)
mnuFont
….斜体(&
mnuFont_Italic
….粗体(&
B)
mnuFont_Bold
….下划线(&
U)
mnuFont_Underline
建立好的用户界面如图7.4所示。
图7.4改变字形的窗体
最后,在代码编辑窗口输入下面的代码:
PrivateSubForm_Load()
Label1.FontBold=False
Label1.FontItalic=False
Label1.FontUnderline=False
Label1.FontName="
TimesNewRoman"
Label1.FontSize="
28"
mnuFont=False
PrivateSubmnuFile_Exit_Click()
PrivateSubmnuFile_Input_Click()
Label1.Caption=InputBox("
请输入:
"
)
IfLabel1.Caption<
>
"
Then
mnuFont=True
Else
mnuFont=False
EndIf
PrivateSubmnuFont_Bold_Click()
Label1.FontBold=NotLabel1.FontBold
mnuFont_Bold.Checked=Label1.FontBold
PrivateSubmnuFont_Italic_Click()
Label1.FontItalic=NotLabel1.FontItalic
mnuFont_Italic.Checked=Label1.FontItalic
PrivateSubmnuFont_Underline_Click()
Label1.FontUnderline=NotLabel1.FontUnderline
mnuFont_Underline.Checked=Label1.FontUnderline
7.1.2弹出式菜单
弹出式菜单能以灵活的方式为用户提供更加便利的操作,它可以根据用户单击鼠标右键时的位置,动态地调整菜单项的显示位置。
因此,弹出式菜单也称为上下文菜单,或快捷菜单。
建立弹出式菜单通常有两步:
首先用菜单编辑器建立菜单,然后用PopupMenu方法弹出显示。
第一步的操作与下拉式菜单基本相同,唯一的区别是需把菜单名(即顶级菜单)的“可见”属性设置为False。
PopupMenu方法的格式为:
[对象.]PopupMenu<
菜单名>
[,flags[,x[,y[,BoldCommand]]]]
说明:
(1)对象:
即窗体名,省略该项将打开当前窗体的菜单。
(2)菜单名:
是指通过菜单编辑器设计的菜单(至少有一个子菜单项)的名称。
(3)Flags:
为一些常量数值的设置,包含位置及行为两个指定值,如表7.2所示。
两个常数可以相加或以or相连。
表7.2Flags参数值
参数
参数值
说明
位置常数
0(默认)
菜单左上角位于X
4
菜单上框中央位于X
8
菜单右上角位于X
行为常数
菜单命令只接受右键单击
2
菜单命令可接受左、右键单击
(4)X和Y:
用来指定弹出式菜单显示位置的横坐标(X)和纵坐标(Y)。
如果省略,则弹出式菜单在鼠标光标的当前位置显示。
(5)BoldCommand:
指定在显示的弹出式菜单中想以粗体字体出现的菜单项的名称。
在弹出式菜单中只能有一个菜单项被加粗。
为了显示弹出式菜单,通常把PopupMenu方法放在MouseDown事件中,该事件响应所有的鼠标单击操作。
一般通过单击鼠标右键显示弹出式菜单,这可以用Button变量实现。
【例7.2】通过弹出式菜单实现字体、字号的变化。
先在窗体上添加一个文本框Text1,用来输入、显示文字信息。
然后通过菜单编辑器设计如下菜单项,如表7.3所示。
表7.3弹出式菜单项
字体属性
“可见”属性设为False
….宋体
mnuFont_Song
….隶书
mnuFont_Li
….楷体
mnuFont_Kai
….黑体
mnuFont_Hei
字形属性
mnuSize
….12
mnuSize_12
….16
mnuSize_16
….20
mnuSize_20
….24
mnuSize_24
当鼠标指针处于文本框内,单击鼠标右键将弹出字体属性菜单,当鼠标指针位于窗体时则弹出字形属性菜单,如图7.5所示。
图7.5弹出式菜单
字体属性弹出式菜单代码为:
PrivateSubmnuFont_Hei_Click()
Text1.FontName="
黑体"
PrivateSubmnuFont_Kai_Click()
楷体"
PrivateSubmnuFont_Li_Click()
隶书"
PrivateSubmnuFont_Song_Click()
宋体"
PrivateSubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,_
XAsSingle,YAsSingle)
IfButton=2Then
PopupMenumnuFont
字形属性弹出式菜单的代码为:
PrivateSubmnuSize_12_Click()
Text1.FontSize="
12"
PrivateSubmnuSize_16_Click()
16"
PrivateSubmnuSize_20_Click()
20"
PrivateSubmnuSize_24_Click()
24"
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,_
IfButton=2ThenPopupMenumnuSize
7.1.3动态定制菜单
有时候需要设计创建的菜单能动态响应运行时的条件,如菜单项的动作在某些点上不适当时,通过使其失效可防止对该菜单项的选取。
例如,在Word应用程序中,若剪贴板上没有任何文本,则“编辑”菜单中的“粘贴”菜单项变为灰色,不能被使用。
1.创建菜单控件数组
既然VisualBasic将菜单项视为控件,因此就可以运用控件数组管理菜单项,即菜单控件数组。
应用菜单控件数组的好处主要有两个:
∙用于动态增删菜单项
∙简化编程,用一段过程代码处理多个菜单项。
比如,可将【例7.2】中的“字体属性”菜单改为控件数组形式,需在菜单编辑器中进行如下设置:
(1)保持“字体属性”菜单项中各属性值不变,并注意其“索引”框必须为空。
(2)把“宋体”菜单项的名称改为mnuFont_Slkh,并将其“索引”设为0,即数组中的第1个元素。
(3)把“隶书”菜单项的名称设为mnuFont_Slkh(与“宋体”菜单项名称相同),并将其“索引”设为1。
(4)重复第3步,分别把“楷体”、“黑体”菜单项名称改为mnuFont_Slkh,“索引”值分别设为2,3。
单击“确定”按钮,返回到窗体设计窗口。
则字体属性菜单的Click事件代码为:
PrivateSubmnuFont_Slkh_Click(IndexAsInteger)
SelectCaseIndex
Case0
Text1.FontName="
Case1
Case2
Case3
EndSelect
需要注意的是菜单控件数组的各元素在菜单项显示区中必须是连续的,而且在同一缩进级上。
创建菜单控件数组时,要把菜单中出现的分隔符也包括进去。
2.使菜单命令有效或无效
所有的菜单控件都具有Enabled属性,当这个属性设为False时,菜单命令无效使它不响应动作。
当Enabled属性设为False时,快捷键的访问也无效。
一个无效的菜单项变为灰色,如图7.6所示。
图7.6无效的菜单项
下列语句可使“编辑”菜单上的“粘贴”菜单项无效:
mnuEdit_Paste.Enabled=False
菜单标题的无效使得整个菜单无效,如下列代码将使“编辑”菜单无效:
mnuEdit.Enabled=False
3.隐藏菜单
如果将菜单的Visible属性设置为False,则在运行时和开发环境中菜单及其所有子菜单都将被隐藏。
当下拉菜单中的一个菜单项不可见时,其余的菜单项上移以填补空出的空间。
如果菜单条上的菜单不可见,则菜单条上其余的控件会左移以填补该空间。
例如,创建两个单独的File菜单,把第一个File菜单最上面的菜单项命名为mnuFile1,把第二个File菜单命名为mnuFile2,两个菜单可以有相同的Caption属性,但他们必须有唯一的Name属性。
无论在开发环境还是在运行中,切换这两个顶层菜单项的Visible属性,使一个可见,另一个隐藏。
利用该项技术,用户可以很容易地用替换集换出整个菜单集。
如图7.7所示,显示了在同一窗体上的两个单独的菜单集,它们分别在单击“变换菜单”命令按钮前后出现。
图7.7同一窗体上的两个不同菜单
这种效果可以用下面的代码实现:
PrivateSubCommand1_Click()
mnuColor.Visible=NotmnuColor.Visible
mnuTools.Visible=NotmnuTools.Visible
mnuEdit.Visible=NotmnuEdit.Visible
mnuOption.Visible=NotmnuOption.Visible
mnuColor.Visible=False
mnuTools.Visible=False
注意,使菜单控件不可见也产生使之无效的作用,通过菜单、热键或快捷键都无法访问该控件。
4.运行时添加菜单控件
运行时可以添加菜单项,例如,VisualBasic的“文件”菜单就是根据打开的工程名添加菜单,显示出最近打开的工程名。
运行时添加菜单项必须使用控件数组。
为了在运行时可以添加菜单项,在设计时必须设置该菜单项的Index属性为0,使它自动成为控件数的一个元素,同时也创建了一个在运行不可见的分隔条。
当运行时用户第一次存储一个文件时,这个分隔条就会变得可见,且第一个文件名被加到该菜单上。
运行时每存储一个文件,则会再装入一个菜单控件到该数组中,从而使该菜单增长。
运行时所创建的控件可以使用Hide方法或者设置该控件的Visible属性为False来隐藏。
如果要从内存中删除一个控件数组中的控件,可使用Unload语句。
例如,在编辑文件菜单时,可以在“另存为”菜单项后面添加一个菜单控件数组mnu_Filehistory(0)~mnu_Filehistory(4),分别代表分隔线及4个历史记录,并将它们的Visible属性设为False。
然后,在“保存”单击事件过程中编写如下代码:
CommonDialog1.ShowSave
IfCommonDialog1.FileName<
mnu_Filehistory(0).Visible=True
Num=Num+1
IfNum>
4Then
Num=1
mnu_Filehistory(Num).Visible=True
mnu_Filehistory(Num).Caption=CommonDialog1.FileName
Else
EndIf
运行程序时,每保存一个文件,菜单项就会自动添加一个历史记录,如图7.8所示。
图7.8运行时添加菜单项
第2节创建工具栏
工具栏同样以其直观、快捷的特点出现在各种应用程序中,事实上工具栏已经成为Windows应用程序的标准功能。
它使用户不必在一级一级的菜单中去搜寻需要的命令,给用户带来比菜单更为快速的操作。
7.2.1手工制作工具栏
用手工制作的工具栏,实际上是一个放置了一些工具按钮的图片框。
通过设置图片框的Align属性,可以控制工具栏(图片框)在窗体中的位置,当改变窗体的大小时,Align属性值非0的图片框会自动地改变大小,以适应窗体的宽度或高度。
图片框上各种工具按钮,如命令按钮、图形方式的选项和复选框、下拉列表控件等,可以通过不同的图像来表示对应的功能,还可以设置按钮的ToolTipText属性为工具按钮添加工具提示。
对于有些按钮如复选框等,需在其上放置两个图像,分别代表按钮弹起及按下时的外观。
例如,通过在窗体上添加一个图片框Picture1和文本框Text1,并在图片框中增加一个命令按钮数组Commadn1(0)~Command1
(2)。
然后将命令按钮的Caption属性值设为空白,Style属性设为1-Graphical,Picture属性分别设为New.bmp、Open.bmp和Save.bmp。
建立好的用户界面如图7.9所示。
图7.9手工制作的工具栏
由于工具按钮通常用于提供对其他(菜单)命令的快捷访问,所以一般都是在其Click事件代码中调用对应的菜单命令。
7.2.2Toolbar控件与ImagList控件
要在工具栏中放置一系列图片按钮,最直接的方法是在窗体上添加工具栏(Toolbar)控件和图像列表(ImageList)控件。
Toolbar控件和ImageList控件是ActiveX控件的一部分,在使用前必须加载“MicrosoftWindowsCommonControls6.0”,然后才能使用工具箱中新添加的ImageList
控件和Toolbar
控件。
1.创建ImageList控件
ImageList控件的作用像图像的储藏室,ImageList控件不能独立使用,它需要Toolbar控件(或ListView,TabStrip,TreeView控件等)来显示所储存的图像。
ImageList控件可以包含任意大小的所有图片文件,但是图片的显示大小都相同。
通常,加入该控件的第一幅图像决定了随后加入图像的显示大小。
在设计时,可以在ImageList属性页中添加图像,按照顺序将需要的图像插入到ImageList中。
例如,在窗体上创建ImageList1后,用鼠标右键单击ImageList1控件,出现弹出式菜单,选择“属性”命令,或者选中窗体上的ImageList1后在属性窗口选择“(自定义)”右边的三点按钮,都可以打开“属性页”对话框。
选择“图像”选项卡,在“图像”选择卡中就可以插入图片了,如图7.10所示。
ImageList控件的ListImage属性是对象的集合,每个对象可以存放图片文件。
图片文件类型有.bmp,.cur,.ico,.jpg和.gif等,并可通过索引(Index)或关键字(Key)来引用每个对象。
控件具有标准的集合方法:
Add,Remove和Clear。
利用这些方法,用户可以在运行时添加、删除图像。
一旦ImageList关联到其他控件,就不能再删除或插入图像了。
图7.10ImageList控件属性页
2.设置工具栏的属性
用鼠标双击Toolbar控件,它将加入窗体并出现在窗体的顶部(也可单击控件后在窗体中画出控件)。
通过设置Toolbar1的Align属性可以控制工具栏在窗体中的位置。
当改变窗体的大小时,Align属性值为非0的工具栏会自动改变大小以适应窗体的宽度或高度。
用鼠标右键单击窗体上的Toolbar1,在弹出的快捷菜单中选择“属性”,将打开“属性页”对话框,如图7.11所示。
“通用”选项卡中的“图像列表”属性将被用来与ImageList控件建立关联。
图7.11Toolbar属性页图7.12“按钮”选项卡
将属性页切换到“按钮”选项卡,创建按钮(Button)对象,如图7.12所示。
其中各项功能说明如下:
(1)插入按钮、删除按钮:
在Button集合中添加或删除元素。
通过Button集合可以访问工具栏中的各个按钮。
(2)索引、关键字:
工具栏中的按钮通过Button集合进行访问,集合中的每个按钮都有唯一的标识,Index属性和Key属性就是这个标识。
Index为整型,Key为字符串型,访问按钮时可以引用二者之一。
(3)标题(Caption)、描述:
标题是显示在按钮上的文字;
描述是按钮的说明信息。
(4)值(Value):
Value属性决定按