1、 第10章 用户界面设计1菜单设计通用对话框设计工具栏设计键盘与鼠标事件多重窗体与多模块程序设计本章要求:第1010章 用户界面设计本章重点:本章难点:通用对话框的使用、菜单的建立与使用键盘与鼠标事件通用对话框的使用、动态菜单、多模块设计 第10章 用户界面设计210.1菜单设计Windows环境下的应用程序一般为用户提供三种菜单:窗体控制菜单、下拉菜单与快捷菜单。第10章 用户界面设计3一.启动菜单编辑器:有三种方法:1单击工具栏菜单图标2工具/菜单编辑器(CTRL+E)3窗体上快捷菜单菜单编辑器菜单编辑器操作界面如右所示。10.1.1菜单编辑器 第10章 用户界面设计4菜单编辑器介绍:1.
2、标题(Caption):2.名称(Name):3.快捷键(Shortcut):4.下一个(Next):5.和按钮6.插入(Insert)按钮:7.删除(Delete)按钮:8和按钮:10.复选(Checked)检查框:10.有效(Enabled)检查框:11.显示窗口列表(WindowList)检查框:第10章 用户界面设计5菜单的主要属性1.标题(Caption):在窗口上显示,例如:输入&File,显示为:File,热键:Alt+F2.名称(Name):菜单项的名称,分界符也应有名称。3.快捷键(Shortcut):下拉列表框4下一个(Next):设置下一个菜单项。5.和按钮:“”下一级菜
3、单项;“”上一级菜单项。6.插入(Insert)按钮:插入菜单项7.删除(Delete)按钮:删除菜单项8.和按钮:改变菜单项位置。10.复选(Checked)检查框:菜单项为选定项。10.有效(Enabled)检查框:True:菜单项可选;False:不可选。11.显示窗口列表(WindowList)检查框:第10章 用户界面设计61设计下拉菜单2设计子菜单或改变子菜单级别3为菜单项分组菜单名用减号“-”4为菜单项指定访问键和快捷键与命令按钮设置访问键相同。5为菜单项加上复选标记6禁止使用菜单项在程序代码中可以通过程序代码:菜单名.Enabled=False7菜单项的增减菜单设计的常用的几项
4、操作:第10章 用户界面设计710.1.2下拉式菜单10.1菜单设计 在下拉式菜单中,一般只需要对下拉菜单的最低级菜单项编写单击事件代码,如果对一个有下级菜单的菜单项编写了单击事件,则在执行下一级菜单时,该菜单程序将先执行。在下拉式菜单中,一般有一个主菜单,称为菜单栏。每个菜单栏包括一个或多个选择项,称为菜单标题。菜单控件(对象)只有一个事件单击事件(Click()Click())一.设计下拉式菜单的步骤:(1)(1)新建一个窗体,并设计用户界面。(2)(2)利用菜单编辑器设计各菜单项。(3)(3)编写每个菜单项的事件过程。(4)(4)运行调试各菜单命令。第10章 用户界面设计8二、下拉式菜单
5、设计举例【例10.1】设计菜单程序,通过菜单控制标签中文字的字体,字型等,程序运行界面如图10.3所示。当用户选择某一菜单项时执行相应的命令功能。图10.3 程序运行界面设计步骤如下:1.界面设计在窗体上添加一个Frame1和Label1,用于显示文字信息。启动菜单编辑器,所要建立的菜单中各菜单项的属性设置如表10.1所示,菜单编辑器中各项设置如图10.4所示,对每一个菜单项输入标题、名称和选择相应的快捷键。第10章 用户界面设计9标题(Caption)名称(Name)索引值说 明字体字体主菜单项1.宋体songti子菜单11快捷键Ctrl+S.楷体kaiti子菜单12快捷键Ctrl+K.黑体
6、heiti子菜单13快捷键Ctrl+H字型字型主菜单项2.粗体(&B)fontstyle0子菜单21热键B.斜体(&I)fontstyle1子菜单22热键I.下划线(&U)fontstyle2子菜单23热键U表10.1 菜单项属性设置(2)编写菜单项代码PrivateSubForm_Load()Label1.FontSize=16Label1.Caption=长亭外古道边+Chr(13)+Chr(10)+芳草碧连天+Chr(13)+Chr(10)+问君此去几时来+Chr(13)+Chr(10)+来时莫徘徊EndSubPrivateSubsongti_Click()Label1.FontName
7、宋体EndSubPrivateSubheiti_Click()Label1.FontName=黑体EndSubPrivateSubkaiti_Click()Label1.FontName=楷体_GB2312EndSub 第10章 用户界面设计10Private Sub fontstyle_Click(Index As Integer)fontstyle(Index).Checked=Not fontstyle(Index).CheckedSelect Case IndexCase 0Label1.FontBold=fontstyle(Index).CheckedCase 1Label1.Fo
8、ntItalic=fontstyle(Index).CheckedCase 2Label1.FontUnderline=fontstyle(Index).CheckedEnd SelectEnd Sub字型下拉菜单代码如下:第10章 用户界面设计11 弹出式菜单是独立于菜单栏显示在窗体或指定控件上的浮动菜单,菜单的显示位置与鼠标当前位置有关。实现步骤如下:1.在菜单编辑器中建立该菜单。2.设置其顶层菜单项(主菜单项)的Visible属性为False(不可见)。3.在窗体或控件的MouseUp或MouseDown事件中调用PopupMenu方法显示该菜单。PopupMenu的使用方法为:Popu
9、pMenu,flags,x,y,Boldcommand10.1.3弹出式菜单其中:关键字“PopupMenuPopupMenu”可以前置窗体名称,但不可前置其他控件名称。是指通过菜单编辑器设计的、至少有一个子菜单项的菜单名称(Name)。Flags参数为常数,用来定义显示位置与行为,其取值见表10.210.2 第10章 用户界面设计12位置常数值描述vbPopupMenuLeftAlign0缺省值。弹出式菜单的左边定位于x。vbPopupMenuCenterAlign4弹出式菜单以x为居中心。vbPopupMenuRightAlign8弹出式菜单的右边定位于x。行为常数值描述vbPopupMe
10、nuLeftButton0缺省值。仅当使用鼠标右键单击时,弹出式菜单中的项目才响应鼠标单击。vbPopupMenuRightButton2弹出式菜单中的项目可接受左、右键单击。10.1.3弹出式菜单设计表10.2flags参数值表Boldcommand参数设置菜单项可以粗体显示。一般的弹出式菜单是在右击时弹出,所以PopupMenu方法一般是放在对象的MouseDown事件过程中,根据按下的是鼠标左键还是右键来决定是否弹出菜单。第10章 用户界面设计13例10.2】为【例10.1】添加一个标签的弹出式菜单,该菜单包含有“10”、“12”和“14”3个菜单项,如图10.5所示。单击相应的菜单项后
11、可以改变标签中文字的字体大小。弹出式式菜单设计举例图10.5 弹出式菜单Private Sub Label1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)If Button=2 Then 按下鼠标右键Form1.PopupMenu fsize,4 Or 2End IfEnd subPrivate Sub size_Click(Index As Integer)Select Case IndexCase 0Label1.fontsize=10Case 1Label1.fontsize=12Case 2L
12、abel1.fontsize=14End SelectEnd sub 第10章 用户界面设计14用“菜单编辑器”对话框创建好的菜单,在程序运行过程中并非就一成不变。用户可以根据实际运行情况动态地调整和控制菜单的使用,给菜单增加一些灵活性。如当某菜单项执行的操作不适合当前环境时,可以暂时使其失效或将其隐藏起来。当需要时也可以添加或删除某菜单项。隐藏或显示菜单项并不能真正地改变菜单的数量,要使菜单项真正地、动态地增减(从内存中),则必须使用菜单控件数组实现。运行时通过Load语句增加新的菜单控件,使用UnLoad语句将其删除。10.1.4动态菜单Load 控件数组名(index)Unload 控件
13、数组名(index)第10章 用户界面设计1510.1.4动态菜单【例10.3】设计如下程序,当文本框中没有任何文字时,“字体大小”菜单中的各项均变为灰色显示,表示当前不可用;当用户在文本框中输入了文字后选择某菜单项后,可将文字大小设为对应值并在当前菜单项的前面加一个“”,如图10.6(a)、图10.6(b)所示。如果用户选择了“14”菜单项,则“10”菜单项将隐藏,并且添加菜单项“16”,其功能与其他菜单项相同,当用户重新选择了“12”菜单项时,“16”菜单项将被删除,并恢复菜单项“10”的可见性,即文字字号最大值为16,最小为10,菜单中只能同时存在三个选项,如图10.6(c)、图10.6
14、d)所示。图10.6 动态修改菜单示例(b)(c)(d)(a)第10章 用户界面设计1610.2 通用对话框工程/部件选定控件标签选定MicrosoftCommDialogControl6.0CommonDialog控件不是标准控件,是一种ActiveX控件,位于Microsoft Common Dialog Control 6.0部件中。确定通用对话框图标 第10章 用户界面设计1710.2.1通用对话框的基本属性和方法1.CommonDialog控件的基本属性(1)Action属性:该属性决定打开何种类型的标准对话框,其取值如表10.4所示。该属性不能在属性窗口中设置,只能在程序中赋值。
15、表10.4 打开通用对话框的方法与Action属性设置类型Action属性方法无对话框0“打开”对话框1ShowOpen“另存为”对话框2ShowSave“颜色”对话框3ShowColor“字体”对话框4ShowFont“打印”对话框5ShowPrinter“帮助”对话框6ShowHelp 第10章 用户界面设计18(2)Name属性:CommonDialog控件的名称属性。(3)CancelError属性:多数对话框都有“取消”按钮,用于向应用程序表示用户想取消当前操作。CancelError属性的作用是向应用程序报告用户取消当前的操作,通过一个错误报告给应用程序。如果该属性设置为True,
16、在程序的运行阶段,用户选择“取消”操作时,出现错误提示。默认是False,不出现错误提示。对话框打开后,为了防止用户没有输入任何信息便使用取消操作,则可用此属性设置出错警告。(4)Flags属性:用于设置对话框外观及工作方式。对于每种对话框都有许多不同的设置值。在通用对话框的使用过程中,每种对话框都有自己的特殊属性。CommonDialog控件的属性可以在属性窗口中设置,也可在其“属性页”对话框中设置。在窗体中的CommonDialog控件上右击,在弹出的快捷菜单中选择“属性”命令,打开“属性页”对话框,该对话框中有五个选项卡,分别可对不同类型的标准对话框设置属性。第10章 用户界面设计19F
17、ilterIndexDefaultExtDialogTiltleFileNameInitDirFilter 在设计时,可以通过属性窗口设置通用对话框的属性设置控件属性,也可以使用通用对话框的属性页设置相关属性。2CommonDialog控件的方法在程序中要使用CommonDialog控件的标准对话框,除了使用CommonDialog控件的Action属性设置对话框的类型外,还可以使用CommonDialog控件的方法。这些方法如表10.4所示。例如:CommonDialog1.Action=1或者CommonDialog1.ShowOpen 第10章 用户界面设计2010.2.2“打开”对话框
18、1.CancelError:返回或设置一个值,该值指示当单击“取消”按钮时是否出错。2.DefaultExt:用于设置或返回对话框默认的文件扩展名。该属性值是一个文件扩展名字符串,如“*.txt”、“*.doc”等。当保存一个没有指定扩展名的文件时,系统自动添加默认扩展名。3.DialogTitle:返回或设置对话框的标题。4.Filename:返回或设置用户所选择的文件的完整路径和文件名称。5.FileTitle:返回用户选择文件的文件名称,包括扩展名,但不包括路径。使用通用对话框控件的ShowOpen方法,或将Action属性赋值为1,可以在运行时显示“打开”对话框。需要设置以下属性:第1
19、0章 用户界面设计216.Filter:设置或返回在对话框的文件类型列表框中所显示文件类型。该属性值可以是一组元素或用“|”符号分开的分别表示不同类型文件的多组元素组成。例如,如果要在“文件类型”列表框中显示下列三种文件类型以供用户选择。WORD文档(*.DOC)扩展名为DOC的Word文件文本文件(*.TXT)扩展名为TXT的文本文件AllFiles(*.*)所有文件那么Filter属性就应该设为:WORD文档(*.doc)|*.doc|文本文件(*.txt)|*.txt|所有文件|*.*7.FilterIndex:返回或设置“打开”或“另存为”对话框中一个默认的过滤器。8.InitDir:
20、返回或设置“打开”对话框中的初始目录。9.MaxFileSize:返回或设置使用CommonDialog控件时,被打开的文件名的最大尺寸。10.2.2“打开”对话框上述属性若在程序中设置,都必须放在使用Action属性或ShowOPen和ShowSave方法调用的“打开”或“另存为”对话框语句之前。否则起不到其功能 第10章 用户界面设计22【例10.4】编写一个简单的文本文件编辑程序,如图10.9所示,文件的内容显示在上面的文本框中。从左到右共6个命令按钮依次按约定命名。下面列出了Command1事件过程的程序代码,其他的事件过程在以后的各节中分别给出。10.2.2“打开”对话框图10.9
21、通用对话框示例 第10章 用户界面设计23程序运行时,当CommonDialog控件的Action属性为2或者调用ShowSave方法时,系统就会弹出“另存为”对话框,它为用户在存储文件时提供了一个标准的用户界面。实际上“另存为”对话框和“打开”对话框涉及的属性基本一样,独有一个属性DefaultExt,表示默认扩展名。10.2.3“另存为”对话框【例10.5】为例10.4中的“另存为”命令按钮(Command2)编写事件过程,把文本框(Text1)中的内容写入一个文本文件。第10章 用户界面设计24颜色对话框是当Action值为3时或者调用ShowColor方法时,系统就会弹出“颜色”对话框
22、为用户提供了颜色选择器,如右图。重要属性Color:用来返回或设置选定的颜色。10.2.4“颜色”对话框【例10.6】为例10.4中的“颜色”命令按钮(Command3)编写事件过程,用“颜色”对话框设置文本框的前景颜色。“颜色”按钮的单击事件过程如下:PrivateSubCommand3_Click()CommonDialog1.Action=3Text1.ForeColor=CommonDialog1.ColorEndSub 第10章 用户界面设计2510.2.5“字体”对话框字体对话框是Action为4时的通用对话框,如下图所示,提供用户选择字体、字号及字体样式等。字体对话框重要的属性
23、有:Color,FontName,FontSize,FontBoldFontItalic,FontStrikethru,FontUnderline,Max等.FontNameFontBold、FontItalicFontSizeFontStrikethruFontUnderlineColorMin、Max 第10章 用户界面设计26Flags属性:设置所显示的字体类型,数据类型为Long。注意 在显示“字体”对话框前,必须先将 Flags 属性设置为 cdlCFScreenFonts,cdlCFPrinterFonts,或cdcdlCFBoth。否则,会发生字体不存在的错误。“字体”对话框的F
24、lags属性设置值系统常数值说明cdlCFScreenFonts&H1显示屏幕字体cdlCFPrinterFonts&H2显示打印机字体cdlCFBoth&H3显示打印机和屏幕字体cdlCFEffects&H100在“字体”对话框中显示删除线和下划线以及颜色组合框10.2.5“字体”对话框 第10章 用户界面设计27【例10.7】为例10.4中的“字体”命令按钮(Command4)编写事件过程,设置文本框的字体。“字体”按钮的单击事件过程如下:PrivateSubCommand4_Click()CommonDialog1.Flags=cdlCFScreenFontsOrcdlCFEffects
25、CommonDialog1.Max=100CommonDialog1.Min=1CommonDialog1.ShowFontCommonDialog1.Action=4Text1.FontName=CommonDialog1.FontNameText1.FontSize=CommonDialog1.FontSizeText1.FontBold=CommonDialog1.FontBoldText1.FontItalic=CommonDialog1.FontItalicText1.FontStrikethru=CommonDialog1.FontStrikethruText1.FontUnder
26、line=CommonDialog1.FontUnderlineText1.ForeColor=CommonDialog1.ColorEndSub 第10章 用户界面设计28程序运行时,当CommonDialog控件的Action属性为5或者调用ShowPrinter方法时,系统就会弹出“打印”对话框,它是一个设置选择打印参数的界面,如图10.12所示。10.2.6“打印”对话框图10.12“打印”对话框重要属性:1.Copies:返回或设置需要打印的份数。2.Max、Min:返回或设置打印范围允许的最大和最小值。3.FromPage、ToPage:返回或设置起始页号和终止页号。当 cdlPD
27、PageNums标志被设置时才有效。第10章 用户界面设计29【例10.8】为例10.4中的“打印”命令按钮(Command5)编写事件过程,用“打印”对话框打印文本框(Text1)中的内容。“打印”按钮的单击事件过程如下:PrivateSubCommand5_Click()DimiAsIntegerCommonDialog1.ShowPrinterCommonDialog1.Action=5Fori=1ToCommonDialog1.CopiesPrinter.PrintText1.TextNextiPrinter.EndDoc结束打印EndSub 第10章 用户界面设计3010.2.7“帮
28、助”对话框程序运行时,当CommonDialog控件的Action属性为6或者调用ShowHelp方法时,系统就会弹出“帮助”对话框,它可以为用户制作应用程序的联机帮助。“帮助”对话框本身不能建立应用程序的帮助文件,它只能将已建好的帮助文件从磁盘中提取出来,并与界面建立连接,从而达到显示并检索帮助信息的目的。使用ShowHelp方法前,必须将CommonDialog控件的HelpFile和HelpCommand属性设置为与其相应的一个常数或值,否则,Winhlp32.exe就不能显示帮助文件。对于“帮助”对话框,有以下几个重要属性:HelpCommand:返回或设置需要的联机帮助的类型。具体设
29、置请参阅VB帮助系统HelpFile:确定Microsoft Windows Help文件的路径和文件名,应用程序使用这个文件显示Help或联机文档。HelpKey:返回或设置标识请求的帮助主题的关键字。HelpContext:该属性与HelpCommand属性一起使用(设置HelpCommand=cdlHelpContext),返回或设置请求的帮助主题的上下文 ID以指定要显示的帮助主题。第10章 用户界面设计31【例10.9】为例10.4中的“帮助”命令按钮(Command6)编写事件过程,通过“帮助”对话框来显示记事本程序的帮助文件。“帮助”按钮的单击事件过程如下:PrivateSubC
30、ommand6_Click()CommonDialog1.HelpCommand=cdlHelpContentsCommonDialog1.HelpFile=c:windowshelpnotepad.hlpCommonDialog1.ShowHelpEndSub 第10章 用户界面设计32工具栏的制作有两种方法:1.是使用命令按钮和图形框来手工制作2.使用ToolBar控件和ImageList控件来制作。前一种方法比较繁琐,较少使用。后一种方法较容易,在VB中常用后一种方法。ToolBar控件和ImageList控件并没有在工具箱里,属于ActiveX控件,需要为工程加载“MicrosoftW
31、indowsCommonControls6.0”控件。加载成功后控件工具栏如图10.13所示。10.3工具栏ImageList图 10.13 添加控件成功后的工具箱ToolBar 第10章 用户界面设计33ImageList控件不单独使用,专门为其它控件提供图像库.使用方法如下:1.在窗体中添加一个ImageList控件。其大小固定,运行时不可见。2.右击ImageList控件,选择“属性”,打开“属性页”对话框,如图所示。3.选择“图像”选项卡,单击“插入图片”按钮,逐个向ImageList控件中加入图片;如果需要删除多余的图片,选中后点击“删除图片”按钮。10.3.1ImageList控件
32、 第10章 用户界面设计34使用ToolBar控件具体创建一个工具栏,首先在窗体中添加一个ToolBar控件,设置ToolBar控件的Align属性以控制工具栏在窗体中的位置。右击选择“属性”,打开“属性页”对话框。10.3.2ToolBar控件1.设置ToolBar控件中的按钮点击“按钮”选项卡,如图所示。单击“插入按钮”和“删除按钮”,可以增加或减少工具栏中的按钮;每个按钮需要使用ImageList控件中的哪个图片作为外观显示,在“图像”中进行设置;“关键字”用于在程序代码中引用该按钮。“标题”与“描述”文本框中是在按钮上显示的文字及按钮的说明信息。在“值”下拉列表中可以设置按钮的状态:0
33、tbrUnpressed为弹起状态1-tbrPressed为按下状态。图10.15“属性页”中“按钮”选项卡 第10章 用户界面设计350-tbrDefault:普通(默认的)按钮。1-tbrCheck:复选框按钮。具有按下、放开两种状态。2-tbrButtonGroup:单选按钮3-tbrSeparator:分隔符。表示将不同组或不同类的按钮分开,如单选按钮。4-tbrPlaceholder:占位符。5-thrDropdown:下拉式按钮。可以建立下拉式菜单。10.3.2ToolBar控件图10.15“属性页”中“按钮”选项卡在“样式”下拉列表中可以设置按钮的行为特点,并且将影响按钮的功能
34、具有六种类型:第10章 用户界面设计362.设置ToolBar控件的通用属性,和ImageList控件建立关联。打开“通用”选项卡,在图像列表选项中选择图像列表控件名ImageList1,这样就建立了工具栏控件与图像列表控件的关联。在程序运行时,下述代码也可建立工具栏控件与图像列表控件的关联:PrivateSubForm_Load()Toolbar1.ImageList=ImageList1EndSub一旦工具栏控件与图像列表控件建立了关联,ToolBar控件“属性页”对话框的“按钮”选项卡中的“图像”选项即变为有效。只需在其中输入图像库中图像的索引号即可将对应的图片添加到按钮上。10.3.
35、2ToolBar控件 第10章 用户界面设计373.响应ToolBar控件事件ToolBar控件常用的事件有两个:ButtonClick和ButtonMenuClick。前者对按钮样式为0-2,后者对样式为5的菜单按钮。(1)用索引Index确定按钮(2)用关键字Key确定按钮PrivateSubToolbar1_ButtonClick(ByvalButtonAsComctlLib.Button)SelectCaseButton.IndexCase1FileNewProcCase2FileOpenProcEndSelectEndSub注意:第1个按钮的Index值为1。用Index还是用Key
36、根据实际需要,Key可读性好,可维护性好。SelectCaseButton.KeyCaseTNewFileNewProcCaseTOpenFileOpenProc.第10章 用户界面设计38【例10.9】创建如图所示的窗体,并编写程序代码实现工具栏上各按钮的功能。图10.16 例10.9 界面设计设计步骤如下:1.设计界面首先在窗体上添加一个文本框,设置其Multiline属性为True,ScrollBars属性为2,添加ImageList控件,该控件包含有图所示的六个图形。添加ToolBar控件,在按钮选项卡中逐个添加按钮。各按钮属性设置如表10.6所示。索引关键字样式图像索引1B1-tbr
37、Check12I1-tbrCheck23U1-tbrCheck343-tbrSeparator05lt2-tbrButtonGroup46ct2-tbrButtonGroup57rt2-tbrButtonGroup6 第10章 用户界面设计39图10.16 例10.9 界面设计2.编写程序代码PrivateSubForm_Load()Toolbar1.ImageList=ImageList1EndSubPrivateSubToolbar1_ButtonClick(ByValButtonAsMSComctlLib.Button)SelectCaseButton.KeyCaseBText1.Fon
38、tBold=NotText1.FontBoldCaseIText1.FontItalic=NotText1.FontItalicCaseUText1.FontUnderline=NotText1.FontUnderlineCaseltText1.Alignment=0CasectText1.Alignment=2CasertText1.Alignment=1EndSelectEndSub 第10章 用户界面设计4010.4.1 键盘事件 在VisualBasic中,提供KeyPress、KeyDown、KeyUp三种键盘事件,窗体和接受键盘输入的控件都识别这三种事件。KeyPress按下对应某
39、ASCII字符的键。KeyDown按下键盘的任意键。KeyUp释放键盘的任意键只有获得焦点的对象才能够接受键盘事件。1.KeyPress事件在按下与ASCII字符对应的键时将触发KeyPress事件。10.4键盘和鼠标事件 第10章 用户界面设计41KeyPress事件过程的语法格式是:SubObject_KeyPress(KeyAsciiAsInteger)其中:Object是指窗体或控件对象名,KeyAscii参数返回对应于ASCII字符代码的整型数值。例如,如果希望将文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:Private Sub Text1_KeyPre
40、ss(KeyAscii As Integer)KeyAscii=Asc(Ucase(Chr(KeyAscii)End Sub10.4键盘和鼠标事件KeyPress事件只识别Enter、Tab和Backspace键。不能够检测其它功能键、编辑键和定位键。第10章 用户界面设计42【例10.10】设计一个应用程序,在窗体中建立一个文本框和一个标签,在文本框中限定只能输入英文字母、空格和BackSpace键,当从键盘向文本框输入英文字符时,将其转换成大写字母并显示在标签中。程序运行结果如图所示。10.4键盘和鼠标事件图10.17 例10.10运行结果PrivateSubText1_KeyPress(
41、KeyAsciiAsInteger)DimcharAsStringSelectCaseKeyAsciiCase65To90,97To122,32char=UCase(Chr(KeyAscii)Label1.Caption=Label1.Caption&charCase8Label1.Caption=Left(Label1.Caption,Len(Label1.Caption)-1)CaseElseKeyAscii=0EndSelectEndSub 第10章 用户界面设计432.KeyDown和KeyUp事件 当一个对象具有焦点时按下(KeyDown)或松开(KeyUp)一个键时发生。它们报告键
42、盘本身准确的物理状态:按下键(KeyDown)及松开键(KeyUp)。KeyDown和KeyUp事件能够检测其它功能键、编辑键和定位键。KeyUp和KeyDown事件过程的语法格式如下:SubObject_KeyDown(KeyCodeAsInteger,ShiftAsInteger)SubObject_KeyUp(KeyCodeAsInteger,ShiftAsInteger)说明:(1)KeyCode参数值是用户所操作的键的扫描代码,它告诉事件过程用户所操作的物理键,例如,不管键盘处于小写状态还是大写状态,用户在键盘上按下“A”健,KeyCode参数值相同。对于有上档字符和下档字符的键,其
43、KeyCode也是相同的,为下档字符的ASCII码。第10章 用户界面设计44keycode参数通过ASCII值或键代码常数来识别键。字母键的键代码与此字母的大写字符的ASCII值相同。所以“A”和“a”的keycode都是由Asc(“A”)返回的数值。表10.7Keycode和KeyAscii值 第10章 用户界面设计452.KeyDown和KeyUp事件KeyUp和KeyDown事件过程的语法格式如下:SubObject_KeyDown(KeyCodeAsInteger,ShiftAsInteger)SubObject_KeyUp(KeyCodeAsInteger,ShiftAsInteg
44、er)说明:(2)Shift参数是一个整数,表示键盘事件发生时Shift、Ctrl和Alt键的状态。Shift是一个位域参数,由若干位组成,每个位的信息指出某一种状态是打开(用1表示)还是关闭(用0表示)。其中最右侧三位用来表示Shift、Ctrl和Alt键的状态,相应二进制位为0时表示未按下对应键,为1时表示按下了对应键。AltAlt键CtrlCtrl键ShiftShift键第3 3位第2 2位第1 1位 第10章 用户界面设计46例如:下例是用Shift参数判断是否按下了字母的大写形式。Private Sub Text1_KeyDown(KeyCode As Integer,Shift A
45、s Integer)If KeyCode=vbKeyA And Shift=1 Then MsgBox You pressed the uppercase A key.End ifEnd Sub表10.8Shift参数的值二进制值十进制值系统常数意义0011vbShiftMaskvbShiftMask按Shift键0102vbCtrlMaskvbCtrlMask按Ctrl键1004vbAltMaskvbAltMask按Alt键0113 3vbShiftMask+vbCtrlMaskvbShiftMask+vbCtrlMask按Shift键和Ctrl键1015vbShiftMask+vbAltM
46、askvbShiftMask+vbAltMask按Shift键和Alt键1106vbCtrlMask+vbAltMaskvbCtrlMask+vbAltMask按Ctrl键和Alt键1117vbCtrlMask+vbAltMask+vbCtrlMask+vbAltMask+vbShiftMaskvbShiftMask按Shift、Ctrl和Alt键 第10章 用户界面设计47【例10.12】设计一个程序,当按下Alt+F5组合键时终止程序的运行。先把窗体的KeyPreview设置为True,再编写如下的程序:Private Sub Form_KeyDown(KeyCode As Integer
47、Shift As Integer)按下Alt键时,Shift的值为4If(KeyCode=vbKeyF5)And(Shift vbAltMask)Then EndEnd Sub10.4键盘和鼠标事件注意:KeyAscii是获取键的Ascii值,就是说你按下主键区的数字和按下数字键区的数字返回的是同一个Ascii值,同一个字母大、小写的KeyAscii是不同的。KeyCode值返回的相当于每个键的标号,每个键都有一个不同的KeyCode值,因而通过KeyCode值可以判断光标键、回车键等键是否按下,可用于程序的特殊控制。第10章 用户界面设计4810.4键盘和鼠标事件大 多 数 控 件 能 够
48、 识 别 鼠 标 的 MouseMove、MouseDown和MouseUp事件,通过响应这些鼠标事件,能在应用程序对鼠标位置及状态的变化作出响应操作。MouseMove每当鼠标指针移动到屏幕新位置时发生MouseDown按下任意鼠标键按钮时发生MouseUp释放任意鼠标键按钮时发生10.4.2鼠标事件 第10章 用户界面设计49MouseMove、MouseDown、MouseUp三个事件的过程的语法格式如下:SubObject_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SubObject_MouseDown(B
49、uttonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)SubObject_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)说明:1Object是可选的一个对象表达式,可以是窗体对象和大多数可视控件。2Button参数是表示按下或松开鼠标哪个按钮,10.4.2鼠标事件 第10章 用户界面设计50参数Button值参数(Button)值说明vbLeftButton1左按钮被按下vbRightButton2右按钮被按下vbMiddleButton4中间按钮被按下10.4.2鼠标事件 第
50、10章 用户界面设计513Shift参数包含了Alt、Ctrl和Shift键的状态信息,和键盘事件过程中的Shift参数含义相同。如果要检测Ctrl和Shift键是否同时被按下,则应使用表达式(ShiftAndvbCtrlMask)And(ShiftAndvbShiftMask),或者表示为Shift=3。10.4.2鼠标事件4X,Y:表示当前鼠标指针的位置【例10.13】设计一个简单的绘图应用程序。当按下任意鼠标键并拖动时,MouseDown事件过程和一个相关的MouseMove事件过程协同工作以启动绘图。MouseUp事件过程禁止绘图。图10.19 简单画图程序 第10章 用户界面设计52






