第7章 完善用户界面.docx

上传人:b****3 文档编号:3462210 上传时间:2022-11-23 格式:DOCX 页数:32 大小:127.50KB
下载 相关 举报
第7章 完善用户界面.docx_第1页
第1页 / 共32页
第7章 完善用户界面.docx_第2页
第2页 / 共32页
第7章 完善用户界面.docx_第3页
第3页 / 共32页
第7章 完善用户界面.docx_第4页
第4页 / 共32页
第7章 完善用户界面.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

第7章 完善用户界面.docx

《第7章 完善用户界面.docx》由会员分享,可在线阅读,更多相关《第7章 完善用户界面.docx(32页珍藏版)》请在冰豆网上搜索。

第7章 完善用户界面.docx

第7章完善用户界面

第7章完善用户界面

用户界面是一个应用程序最重要的部分,它是最直接的现实世界。

对用户而言,界面就是应用程序,他们感觉不到幕后正在执行的代码。

不论花多少时间和精力来编制和优化代码,应用程序的可用性仍然依赖于界面。

在Windows环境下操作一个软件,最直观、方便的工具莫过于菜单、工具栏的应用,这也是本章介绍的主要内容。

第1节使用菜单

菜单对于我们来说并不陌生,要打开文件、保存文件、执行程序等都离不开菜单。

菜单用来表示程序的各项命令,把程序所提供的各种命令按功能分类,功能类似的命令放在同一个子菜单中,功能相距较远的命令放在不同的子菜单中,这样组成一个个的子菜单,并用菜单栏中的各项来代表它们,便构成了整个菜单。

在实际的应用中,菜单可分为两种基本类型:

下拉式菜单和弹出式菜单。

下拉式菜单一般通过单击菜单栏中菜单标题(如文件、编辑等)的方式打开,其结构如图7.1所示。

弹出式菜单是当单击鼠标右键时出现的菜单,是显示在窗体上独立于菜单栏的浮动菜单,如图7.2所示,弹出式菜单上显示的菜单项取决于鼠标右键按下时鼠标指针所在的位置。

图7.1下拉式菜单图7.2弹出式菜单

在VisualBasic中,菜单也是一个控件对象。

与其他控件一样,它具有定义外观与行为的属性,在设计或运行时可以设置Caption,Enabled,Visible等属性。

菜单控件只包含一个事件,即Click事件,当用鼠标或键盘选中该菜单控件时,将调用该事件。

7.1.1菜单编辑器

菜单编辑器是VisualBasic提供的用于设计菜单的编辑器。

用菜单编辑器可以创建新的菜单和菜单项,在已有的菜单上增加新的菜单命令,编辑已有的菜单命令,以及修改和删除已有的菜单和菜单项。

要打开菜单编辑器,可以在“工具”菜单中选择“菜单编辑器”,或者单击工具栏中的“菜单编辑器”按钮,打开后的菜单编辑器如图7.3所示。

图7.3菜单编辑器

菜单编辑器分为3部分:

菜单项属性区、编辑区和菜单项显示区。

1.菜单项属性区

用来输入或修改菜单项,设置属性。

分为若干栏,各栏的作用如下:

(1)标题(Caption):

用于设置菜单栏上显示的文本。

如果想定义热键,可以在标题中使用“&访问字符”的格式,然后可以用“Alt+带下划线的字符”来选中这个项目。

如果在该栏中输入一个减号(-),可以在菜单中加入一条分隔线。

(2)名称(Name):

菜单控件的名字,每个菜单项都必须有个名字,就像命令按钮、文本框一样。

菜单名字一般以mnu作为前缀,后面的为顶层菜单的名称,如“文件”菜单名称为“mnuFile”,而其下一级子菜单“新建”的名称为“mnuFileNew”。

(3)索引(Index):

设置菜单控件数组的下标,相当于控件数组的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

….斜体(&I)

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

EndSub

PrivateSubmnuFile_Exit_Click()

UnloadMe

EndSub

PrivateSubmnuFile_Input_Click()

Label1.Caption=InputBox("请输入:

")

IfLabel1.Caption<>""Then

mnuFont=True

Else

mnuFont=False

EndIf

EndSub

PrivateSubmnuFont_Bold_Click()

Label1.FontBold=NotLabel1.FontBold

mnuFont_Bold.Checked=Label1.FontBold

EndSub

PrivateSubmnuFont_Italic_Click()

Label1.FontItalic=NotLabel1.FontItalic

mnuFont_Italic.Checked=Label1.FontItalic

EndSub

PrivateSubmnuFont_Underline_Click()

Label1.FontUnderline=NotLabel1.FontUnderline

mnuFont_Underline.Checked=Label1.FontUnderline

EndSub

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

行为常数

0(默认)

菜单命令只接受右键单击

2

菜单命令可接受左、右键单击

(4)X和Y:

用来指定弹出式菜单显示位置的横坐标(X)和纵坐标(Y)。

如果省略,则弹出式菜单在鼠标光标的当前位置显示。

(5)BoldCommand:

指定在显示的弹出式菜单中想以粗体字体出现的菜单项的名称。

在弹出式菜单中只能有一个菜单项被加粗。

为了显示弹出式菜单,通常把PopupMenu方法放在MouseDown事件中,该事件响应所有的鼠标单击操作。

一般通过单击鼠标右键显示弹出式菜单,这可以用Button变量实现。

【例7.2】通过弹出式菜单实现字体、字号的变化。

先在窗体上添加一个文本框Text1,用来输入、显示文字信息。

然后通过菜单编辑器设计如下菜单项,如表7.3所示。

表7.3弹出式菜单项

标题

名称

说明

字体属性

mnuFont

“可见”属性设为False

….宋体

mnuFont_Song

….隶书

mnuFont_Li

….楷体

mnuFont_Kai

….黑体

mnuFont_Hei

字形属性

mnuSize

“可见”属性设为False

….12

mnuSize_12

….16

mnuSize_16

….20

mnuSize_20

….24

mnuSize_24

当鼠标指针处于文本框内,单击鼠标右键将弹出字体属性菜单,当鼠标指针位于窗体时则弹出字形属性菜单,如图7.5所示。

图7.5弹出式菜单

字体属性弹出式菜单代码为:

PrivateSubmnuFont_Hei_Click()

Text1.FontName="黑体"

EndSub

PrivateSubmnuFont_Kai_Click()

Text1.FontName="楷体"

EndSub

PrivateSubmnuFont_Li_Click()

Text1.FontName="隶书"

EndSub

PrivateSubmnuFont_Song_Click()

Text1.FontName="宋体"

EndSub

PrivateSubText1_MouseDown(ButtonAsInteger,ShiftAsInteger,_

XAsSingle,YAsSingle)

IfButton=2Then

PopupMenumnuFont

EndIf

EndSub

字形属性弹出式菜单的代码为:

PrivateSubmnuSize_12_Click()

Text1.FontSize="12"

EndSub

PrivateSubmnuSize_16_Click()

Text1.FontSize="16"

EndSub

PrivateSubmnuSize_20_Click()

Text1.FontSize="20"

EndSub

PrivateSubmnuSize_24_Click()

Text1.FontSize="24"

EndSub

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,_

XAsSingle,YAsSingle)

IfButton=2ThenPopupMenumnuSize

EndSub

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

Text1.FontName="隶书"

Case2

Text1.FontName="楷体"

Case3

Text1.FontName="黑体"

EndSelect

EndSub

需要注意的是菜单控件数组的各元素在菜单项显示区中必须是连续的,而且在同一缩进级上。

创建菜单控件数组时,要把菜单中出现的分隔符也包括进去。

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

EndSub

PrivateSubForm_Load()

mnuColor.Visible=False

mnuTools.Visible=False

EndSub

注意,使菜单控件不可见也产生使之无效的作用,通过菜单、热键或快捷键都无法访问该控件。

4.运行时添加菜单控件

运行时可以添加菜单项,例如,VisualBasic的“文件”菜单就是根据打开的工程名添加菜单,显示出最近打开的工程名。

运行时添加菜单项必须使用控件数组。

为了在运行时可以添加菜单项,在设计时必须设置该菜单项的Index属性为0,使它自动成为控件数的一个元素,同时也创建了一个在运行不可见的分隔条。

当运行时用户第一次存储一个文件时,这个分隔条就会变得可见,且第一个文件名被加到该菜单上。

运行时每存储一个文件,则会再装入一个菜单控件到该数组中,从而使该菜单增长。

运行时所创建的控件可以使用Hide方法或者设置该控件的Visible属性为False来隐藏。

如果要从内存中删除一个控件数组中的控件,可使用Unload语句。

例如,在编辑文件菜单时,可以在“另存为”菜单项后面添加一个菜单控件数组mnu_Filehistory(0)~mnu_Filehistory(4),分别代表分隔线及4个历史记录,并将它们的Visible属性设为False。

然后,在“保存”单击事件过程中编写如下代码:

CommonDialog1.ShowSave

IfCommonDialog1.FileName<>""Then

mnu_Filehistory(0).Visible=True

Num=Num+1

IfNum>4Then

Num=1

mnu_Filehistory(Num).Visible=True

mnu_Filehistory(Num).Caption=CommonDialog1.FileName

Else

mnu_Filehistory(Num).Visible=True

mnu_Filehistory(Num).Caption=CommonDialog1.FileName

EndIf

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属性决定按

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1