1、第10章 对话框和菜单,10.1 通用对话框控件10.2 菜单设计,“通用对话框”是一种ActiveX控件,它随同VB提供给程序设计人员。启动VB后,在工具箱中没有对话框控件,需要把它加到工具箱中。控件添加步骤: (1)打开“工程”菜单,选择“部件”命令。(2)打开“控件”选项卡,并选中“Microsoft Common Dialog Control 6.0”复选框。 (3)单击“确定”按钮,控件出现在工具箱中 。,10.1 通用对话框控件 CommonDialog,ActiveX控件:,根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,Act
2、iveX插件以前也叫做OLE(对象连接与嵌入)控件OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。 ActiveX控件是可重用的软件组件。使用它可以很快地在网址、应用程序以及开发工具中加入特殊的功能。ActiveX控件的使用者可以无需知道这些组件是如何开发的,便可以完成网页或应用程序的设计。,通用对话框控件提供了六种类型的对话框 ,对话框的类型需要在程序中设置,具体方法有两种:(1)设置属性:CommonDialog1.Action = n(2)执行方法:CommonDialog1.ShowOpen,通用对话框的类型设置,CommonDialog控件与“打开/另存
3、为”对话框有关的属性 :,一、打开/另存为对话框,(1) DialogTitle 属性设置对话框的标题,缺省时为“打开”或“保存” 。,(2) FileName属性设置或返回要打开或保存的文件的路径及文件名。例如:H:exefiledb.exe,(2) FileTitle属性用来返回所选择的文件名(不含路径)。例如:db.exe只能在程序中使用该属性。,(4) Filter属性指定在对话框中显示的文件类型。可以设置多个文件类型,供用户在对话框的“文件类型”的下拉列表中选择。格式如下:对话框名.Filter=描述符1|过滤器1|描述符2|过滤器2,例如:CommonDialog1.Filter=
4、 “All Files(*.*) | *.*| EXE文件(*.EXE) |*.EXE|BAT文件(*.BAT)|(*.BAT),通配符和扩展名,(5) FilterIndex属性指定默认的过滤器,其设置值为一个整数。Filter属性设置多个过滤器后,每个都有一个索引值。第一个过滤器的索引值为1,第二个过滤器的索引值为2,例如:CommonDialog1.Filter= “All Files(*.*) | *.*| EXE文件(*.EXE) |*.EXE|BAT文件(*.BAT)|(*.BAT)CommonDialog1.FilterIndex=2,(6) CancelError属性当Canc
5、elError为True时,用户单击“取消”按钮,将产生一个错误,错误号为32755(cdlCancel)以便程序判断。当CancelError为False时,单击“取消”按钮,将不产生错误信息。,补充: Shell函数调用应用程序格式:shell(命令字符串,窗口类型)(1) 命令字符串:必须是可执行文件,即扩展名必须为COM、 EXE、BAT、PIF,其他不可 。 注:目录及文件名不能包含汉字。(2) 窗口类型:0、1、2、3、4、6 vbHide/0: 窗口被隐藏,具有焦点 vbNormalFocus/1:窗口正常大小,具有焦点 vbMinimizeFocus/2:窗口最小化,具有焦点
6、vbMaximizeFocus/3:窗口最大化,具有焦点 vbNormalNoFocus/4:窗口正常,不具有焦点 vbMinimizeNoFocus/6:窗口最小化,不具有焦点,Shell函数成功执行后,返回一个任务标识(task id)且必须赋给一个变量 x=shell(”c:vb98myvb1.exe”,3)不可以省略“x=”Shell函数采用异步方式执行其他程序,即shell启动的 程序可能还没有执行完,就已执行了Shell函数后面的语句例如:Private Sub command1_click() m% = InputBox(shuru 13) Select Case m Case
7、1: x = Shell(H:exefiledb.exe, 1) Case 2: x = Shell(H:exefilejxzd.exe, 1) Case 3: x = Shell(H:exefilepz.exe, 1) End SelectEnd Sub,例10.1 显示“打开”对话框并运行选定的可执行文件。p257,(1)界面设计,(2)程序代码,Private Sub Command1_Click() Dim RetVal CommonDialog1.CancelError = True On Error GoTo Er 错误捕捉,参见第13章p326 以下设置过滤器 CommonDia
8、log1.Filter = All Files(*.*) |*.*|EXE文件(*.EXE) |*.EXE|BAT文件(*.BAT)|*.BAT CommonDialog1.FilterIndex = 2 指定缺省过滤器 CommonDialog1.ShowOpen 显示打开对话框 以下调用Shell函数打开指定的文件 RetVal = Shell(CommonDialog1.FileName, vbNormalFocus)Er: Exit SubEnd Sub,“颜色对话框”可以用来在调色板中选择颜色,或者创建并选定自定义颜色。CommonDialog1.Action = 3 或Common
9、Dialog1. ShowColor,10.1.2 颜色对话框,10.1.2 颜色对话框,“颜色对话框”控件的重要属性: DialogTitle, CancelError,Color,Flags。Color: 用来设置初始颜色。Flags: 用来设置对话框的选项,其中,属性值为cdlCCRGBInit或1时,使得Color属性定义的颜色在首次显示对话框时作为选定颜色。例如:Private Sub Form_Load() CommonDialog1.ShowColor CommonDialog1.Color = &H000000FF& 红色 CommonDialog1.Flags = 1End
10、Sub,例10.2 显示“颜色”对话框,并把用户选择的颜色设置成窗体的背景色。,Private Sub Command1_Click() CommonDialog1.CancelError = True On Error GoTo ErrHandler CommonDialog1.Color = &HFF0000 兰色 CommonDialog1.Flags = 1 设置Flags属性 CommonDialog1.ShowColor Color属性值作为窗体背景颜色 Form1.BackColor = CommonDialog1.ColorErrHandler: Exit SubEnd Sub
11、,10.1.3 字体对话框,“字体”对话框用来设定字体大小、样式、颜色。CommonDialog1.Action = 4 或CommonDialog1. ShowFont,通用对话框的属性设置: (1)Color属性:设定字体颜色的初始值。为了使用此属性,必须先将Flags属性设置为cdlCFEffects/256(允许中划线、下划线和颜色)。(2) FontName属性:字体的名称 (3) FontBold属性:粗体(4) FontItalic属性:斜体(5) FontStrickethru属性:删除线(6) FontUnderline属性:下划线(7) FontSize属性:字体大小,为了
12、显示“字体”对话框,Flags属性设置为下述VB常数之一:cdlCFScreenFonts(屏幕支持的字体) cdlCFPrinterFonts(打印机支持的字体) cdlCFBoth(即可以是屏幕字体又可以是打印机字体)例10.3 初始化并显示“字体”对话框,然后根据用户的选择设置文本框的字体属性 。,Private Sub Command1_Click( ) CommonDialog1.CancelError = True On Error GoTo ErrHandler 设置Flags属性 CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects 设
13、置“字体”对话框的初始值 CommonDialog1.FontName = 隶书 CommonDialog1.FontSize = 50 CommonDialog1.FontBold = True CommonDialog1.FontItalic = True CommonDialog1.FontUnderline = True CommonDialog1.FontStrikethru = True CommonDialog1.Color = RGB(255, 0, 0),显示字体对话框 CommonDialog1.ShowFont 根据用户的选择设置文本的属性 Text1.FontName
14、= CommonDialog1.FontName Text1.FontSize = CommonDialog1.FontSize Text1.FontBold = CommonDialog1.FontBold Text1.FontItalic = CommonDialog1.FontItalic Text1.FontUnderline = CommonDialog1.FontUnderline Text1.FontStrikethru = CommonDialog1.FontStrikethru Text1.ForeColor = CommonDialog1.ColorErrHandler:
15、Exit SubEnd Sub, 10.1.4 打印对话框,通用对话框的属性设置/返回:(1) Copies属性:返回/设置要打印的份数。(2) FromPage属性:返回/设置打印的起始页。(3) ToPage属性:返回/设置打印的终止页。(4) Orientation属性:返回/设置打印的方向 。,Private Sub Command1_Click( ) Dim BeginPage, EndPage, NumCopies, k CommonDialog1.CancelError = True On Error GoTo out CommonDialog1.ShowPrinter 从对话框
16、中获取用户选定的信息: BeginPage = CommonDialog1.FromPage EndPage = CommonDialog1.ToPage NumCopies = CommonDialog1.Copies For k = 1 To NumCopies 在此放置打印代码 Next k out: Exit SubEnd Sub,需要设置的属性:(1) HelpCommand属性:设置帮助显示的类型,一般为VB常数(2) HelpFile属性:指定帮助文件,10.1.5 帮助对话框,10.2 菜单设计,对于VB应用程序,当操作比较简单时,一般通过控件来执行相应的功能;而当要完成较复杂
17、的操作时,使用菜单具有十分明显的优势。,10.2.1 菜单概述1. 菜单基本类型:下拉菜单和弹出式菜单。,2. 下拉菜单有关术语:主菜单(通常为一行),菜单标题;下拉菜单列表框,菜单项,快捷键,启动菜单编辑器常用的方法:选择“工具”菜单中的“菜单编辑器”选项。单击按钮栏中的“菜单编辑器”按钮。在要建立菜单的窗体上单击鼠标右键,将弹出一个菜单,选择“菜单编辑器” 。,10.2.2 菜单编辑器,菜单编辑器是对菜单控件的属性进行设置的专用对话框。,菜单编辑器窗口分为三个部分1菜单项属性区(数据区) 标题(Caption):输入所建立菜单的标题。名称(Name):是一文本框,,输入所建菜单的名称,该名
18、称不在菜单中显示的,而是在代码中引用。索引(Index):用来创建菜单控件数组,即所有的菜单名称都相同,用不同的Index属性来区分。快捷键:是一列表框,用来为菜单项设置快捷键。,帮助上下文ID:是一文本框,取值为数值。用来调用为菜单项准备的帮助文件的标题页。用户按下F1键,则该数值用来定位和显示帮助文件。协调位置:是一个列表框,用来确定菜单显示窗体中的位置。,复选(Checked):当选择该项时,可以在菜单项旁加上指定的记号(如) ;该项类似一个开关项 。,有效(Enabled):默认情况下,该属性被设置为True,表明菜单项可用。如果取消选择,即设置为False,相应的菜单项会“灰化”,不
19、响应用户操作。可见(Visible):决定菜单项是否可见,显示窗口列表:在多文档应用程序中,当该选项设置为“On”(框内有“”),将显示当前打开的一系列子窗口列表 。,2菜单列表框区(编辑区) 用来对输入的菜单项进行调整。左、右箭头:用来确定菜单项的层次。 上、下箭头: 用来移动菜单项在菜单中的位置。 下一个:将菜单列表区中的光标移到下一个菜单项。插入:用来插入新的菜单项。 删除:删除条形光标所在的菜单项。,3.菜单项列表区输入的菜单项全在这里显示。,10.2.3 用菜单编辑器建立下拉菜单,例1 p265:设计一个设置字体属性的下拉菜单,通过该菜单可以改变窗体上标签控件的显示样式。,1.界面设
20、计(1)新建窗体、标签。,(2)利用菜单编辑器建立菜单。菜单项标题为“-”(减号)时,表示显示雕刻线。,每一个“菜单项”是一个独立的控件,有对应的事件。,3. 编写代码 p265.vbp,2.设置标签的属性Name: lblShowCaption: “字体控制示例”,Private Sub mnuFontBold_Click() 粗体 LblShow.FontBold = Not LblShow.FontBold mnuFontBold.Checked = LblShow.FontBoldEnd SubPrivate Sub mnuFontItalic_Click() 斜体 LblShow.F
21、ontItalic = Not LblShow.FontItalic mnuFontItalic.Checked = LblShow.FontItalic 逻辑值End Sub,Private Sub mnuFontUnderline_Click( ) 下划线 LblShow.FontUnderline = Not lShow.FontUnderline mnuFontUnderline.Checked =LblShow.FontUnderlineEnd Sub,弹出式菜单是独立于菜单栏而显示在窗体上的浮动菜单。步骤:(1) 用菜单编辑器建立菜单。(2) 用PopupMenu方法弹出显示: (
22、必须把主菜单项的“可见”属性设为False),10.2.4 建立弹出式菜单,PopupMenu格式:对象.PopupMenu 菜单名, Flags ,x , y , BoldCommand 对象:窗体名,缺省为当前活动窗口。菜单名:在菜单编辑器中定义的主菜单项名。X、Y:式菜单在窗体上的显示位置(与Flags配合使用)。BoldCommand:指定在弹出式菜单中用粗体显示的菜单项, 只能有一个菜单项名被加粗。Flags:弹出式菜单的位置和性能。,例2:设计一个设置字体属性的弹出式菜单,通过该菜单可以改变窗体上标签控件的显示样式。P268_1.vbp,1.界面设计(1)新建窗体、标签。(与例1同
23、),(2)利用菜单编辑器建立菜单。与例1类似,注意主菜单项的“可见”属性设为False。,Private Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then 检查是否单击了鼠标右键 PopupMenu mnuFont 把字体菜单显示为一个弹出式菜单 End IfEnd Sub,Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
24、 Dim xloc, yloc 设置X变量和Y变量到窗体中心 xloc = ScaleWidth / 2 yloc = ScaleHeight / 2 显示弹出式菜单 PopupMenu mnuFont, vbPopupMenuCenterAlign Or vbPopupMenuRightButton, xloc, yloc,例3:在例2的基础上,设计一个上边框在窗体的中心的弹出式菜单。P268_2.vbp,通用对话框控件提供了六种类型的对话框类型设置方法: 执行方法:CommonDialog1.ShowOpen或设置Action属性:,通用对话框的类型设置,复习,10.1 通用对话框控件,下
25、拉菜单弹出式菜单动态菜单,10.2 菜单设计,菜单项的增减是通过控件数组来实现的。例10.6 编写程序,实现菜单的增减 操作。Exam106.vbp,10.2.5 动态菜单(自动增减菜单项 ),1.利用菜单编辑器设计初始菜单,P270.vbp,Dim MenuCounter As IntegerPrivate Sub mnuAdd_Click() msg$ = Enter the menu title: temp$ = InputBox$(msg$, Add Menu) MenuCounter = MenuCounter + 1 Load mnuTest(MenuCounter) 产生一个新数组元素 mnuTest(MenuCounter).Caption = temp$ mnuTest(MenuCounter).Visible = True mnuDel.Enabled = TrueEnd Sub,2.编写程序代码,Private Sub mnuDel_Click() Unload mnuTest(MenuCounter) 删除最后元素 MenuCounter = MenuCounter - 1 If MenuCounter = 0 Then mnuDel.Enable=FalseEnd Sub,