【教学课件】第9章菜单与对话框.ppt
第9章 菜单与对话框,第9章 菜单与对话框,9.1 使用菜单 菜单是Windows应用程序中十分关键的要素之一,它以分组的形式组织多个命令或操作,为用户灵活操作应用程序提供了便捷的手段。在实际的应用中,菜单可分为两种基本类型:下拉式菜单和弹出式菜单。菜单由若干个命令、分隔条、子菜单标题(其右边含有三角的菜单项)等菜单项组成。,1.菜单控件 在VB中,菜单也是一个图形对象,即控件。与其它控件一样,它具有定义其外观与行为的属性。在设计或运行时可以设置Caption属性、Enabled和Visible属性、Checked属性以及其它属性。菜单控件只包含一个事件,即Click事件.与一般控件不同的是,菜单控件不在VB的工具箱中,需要在VB的“菜单编辑器”中进行菜单的设计。,2.菜单编辑器 用菜单编辑器可以创建新的菜单和菜单项、在已有的菜单上增加新命令、编辑已有的菜单命令、以及修改和删除已有的菜单和菜单项。在VB系统的“工具”菜单中选择“菜单编辑器”,或在“工具栏”上单击“菜单编辑器”按钮都可以打开菜单编辑器,如图9-2所示。图9-2 菜单编辑器,菜单编辑器分为三个部分:1)菜单控件属性区。用于设置菜单项的各个属性,表9-1列出其中的主要属性:表9-1 菜单控件的主要属性其他属性可参见VB的联机帮助。,2)编辑区。编辑区共有7个按钮,用来对输入的菜单项进行简单的编辑。3)菜单控件列表框。菜单控件列表框位于菜单编辑器的下部,输入的菜单项在这里显示出来,并通过内缩符号表明菜单项的层次,如图9-3所示。图9-3 菜单控件列表框与对应的菜单项,3.下拉式菜单的设计【例9-1】为例4-13中的电子标题板增加一个菜单,利用菜单来控制标题板的内容、字体、字体风格等,如图9-4所示。图9-4 利用菜单控制标题板,只需在例4-13的基础上作如下修改:打开菜单编辑器,按照表9-3设计菜单项:表9-3 菜单项的设置,编写菜单项代码。编写“文本内容”项Txt的Click事件代码:Private Sub Txt_Click()temp=InputBox(请输入标题板的新内容,输入,Label1.Caption)If temp Then Label1.Caption=temp End IfEnd Sub,编写“文本字体”中4个菜单选项的Click事件代码:Private Sub song_Click()Label1.FontName=宋体End SubPrivate Sub li_Click()Label1.FontName=隶书End SubPrivate Sub kai_Click()Label1.FontName=楷体_GB2312End SubPrivate Sub hei_Click()Label1.FontName=黑体End Sub,编写“文本风格”中3个菜单选项的Click事件代码:Private Sub bld_Click()bld.Checked=Not bld.Checked Label1.FontBold=bld.CheckedEnd SubPrivate Sub Itl_Click()Itl.Checked=Not Itl.Checked Label1.FontItalic=Itl.CheckedEnd SubPrivate Sub Undrln_Click()Undrln.Checked=Not Undrln.Checked Label1.FontUnderline=Undrln.CheckedEnd Sub,4.菜单控件数组 既然VB将菜单项视为控件,因此就能运用控件数组的概念。菜单控件数组的作用主要有两个:1)用于动态地增删菜单项。2)简化编程,用一段代码处理多个菜单项。【例9-2】在例9-1中使用菜单控件数组。只需在例9-1的基础上作如下修改:,1)打开菜单编辑器,按照表9-4修改菜单项:表9-4 菜单项的修改,2)修改菜单项代码。Private Sub fname_Click(Index As Integer)Select Case Index Case 1 Label1.Fontname=宋体 Case 2 Label1.Fontname=隶书 Case 3 Label1.Fontname=楷体_GB2312 Case 4 Label1.Fontname=黑体 End SelectEnd Sub,删除原“文本风格”中3个菜单选项的Click事件代码,编写“文本风格”菜单中的菜单控件数组Styly的Click事件代码:Private Sub Styly_Click(Index As Integer)Styly(Index).Checked=Not Styly(Index).Checked Select Case Index Case 1 Label1.FontBold=Styly(Index).Checked Case 2 Label1.FontItalic=Styly(Index).Checked Case 3 Label1.FontUnderline=Styly(Index).Checked End SelectEnd Sub,5.菜单项的可用与不可用 VB设计的菜单可以根据程序的运行状态动态地进行调整。可以暂时将其关闭,不让用户选择该菜单项,可以将其隐藏,就像根本没有这个菜单项一样,等到条件成熟时,再重新显示被隐藏的菜单项。【例9-3】在例9-2中,当前文本的字体在菜单中被关闭菜单项呈灰色,可以选择未被选择的字体。如图9-5所示。,Private Sub fname_Click(Index As Integer)Select Case Index Case 1 Label1.Fontname=宋体 Case 2 Label1.Fontname=隶书 Case 3 Label1.Fontname=楷体_GB2312 Case 4 Label1.Fontname=黑体 End Select For Each x In fname x.Enabled=IIf(x.Index=Index,False,True)NextEnd Sub,如果改为影藏:x.Visible=IIf(x.Index=Index,False,True),9.1.2 弹出式菜单 弹出式菜单能以灵活的方式为用户提供更加便利的操作,它可以根据用户单击鼠标右键时的位置,动态地调整菜单项的显示位置,同时也改变菜单项显示内容,因此弹出式菜单又称为“上下文菜单”或“快捷菜单”。为了显示“弹出式菜单”,可以使用PopupMenu方法,语法为:窗体名.PopupMenu菜单名,flags,x,y,boldcommand Flags参数为一些常量数值的设置,包含位置常数及行为常数两个指定值,见表9-5和表9-6。,表9-5 位置常数表9-6 行为常数,窗体名.PopupMenu菜单名,flags,x,y,boldcommand,Boldcommand参数可以指定在显示的弹出式菜单中想以粗体字体出现的菜单项的名称。在弹出式菜单中只能有一个菜单项被加粗。为创建一个不显示在菜单栏里的菜单,可在设计时使顶级菜单项目为不可见(保证在菜单编辑器里的“Visible”复选框没有被选上)。当VB显示一个弹出式菜单时,指定的顶级菜单的Visible属性会被忽略。【例9-4】在例9-1中实现弹出式菜单(如图9-7)。图9-7 自定义的弹出式菜单,只需增加标签和窗体的MouseDown事件代码:Private Sub Label1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)If Button=2 Then PopupMenu Styl,6 End IfEnd SubPrivate Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)If Button=2 Then PopupMenu txtfont,6 End IfEnd Sub 注意:在VB的文本框中,即使不编程也可以得到一个弹出式菜单。,9.2 公共对话框“公共对话框”(Common Dialog)控件为用户提供了一组标准的系统对话框,可以使用它进行打开或保存文件、设置打印选项、选择各种颜色以及选择字体等的操作。另外还可以通过调用Windows帮助引擎来显示应用程序的帮助。9.2.1 添加“公共对话框”控件“公共对话框”控件属于VB专业版和企业版所特有的ActiveX控件,位于文件C:WindowsSystemComdlg32.ocx中,名称为“Microsoft Common Dialog Control 6.0”。,用鼠标右键单击控件工具箱,在弹出菜单中选择“部件”,打开部件对话框(如图9-9左)。在“部件”对话框中,选定所需的文件,按“确定”按钮即可将“公共对话框”控件添加到控件工具箱中(图9-9右)。图9-9 添加“公共对话框”控件,9.2.2 使用“公共对话框”在程序运行时“公共对话框”控件不可见。在程序运行时,“公共对话框”可以显示一个对话框或是执行帮助的引擎,所显示的对话框由控件的“方法”决定。共有6种方法。表9-7 通用对话框控件的方法列表,每种对话框都有自己特殊的属性,这些属性既可以在属性窗口中设置,也可以在代码中设置,还可以在“属性页”对话框中设置。在属性窗口中选择“(自定义)”,再单击右侧的“”按钮,就会出现“属性页”对话框,如图9-10所示。图9-10“属性页”对话框,1.使用“打开”对话框 打开文件是Windows应用程序(例如Office)中的常用操作。“打开”对话框可以用来指定文件所在的驱动器、文件夹以及文件名、文件扩展名,如图9-11所示。图9-11“打开”对话框 运行时选定文件并关闭对话框后,可用FileName属性得到文件所在的驱动器、文件夹以及文件名、文件扩展名。,使用“打开”对话框的步骤如下:1)首先在窗体中增加“公共对话框”控件。2)然后在“属性页”对话框中设置属性。3)最后使用CommonDialog控件的ShowOpen方法来显示“打开”对话框:控件名.ShowOpen 控件名.ShowColor,4.使用“字体”对话框“字体”对话框设置并返回所用字体的名字、样式、大小、效果及颜色。注意:必须将Flags属性设为下列常数之一与其他选项之和:cdlCFScreenFonts或1(屏幕字体)cdkCFPrinterFonts或2(打印机字体)cdlCFBoth或3(=1+2 两种字体皆有)例如:设为259(=256+3是cdlCFEffects常数与3之和,在对话框中将出现颜色、效果等选项)。,【例9-5】使用公共对话框控件的例子(图9-17)。图9-17 使用“公共对话框”控件,Private Sub Command1_Click(Index As Integer)n=Index Select Case n Case 0 CommonDialog1.Filter=所有文件(*.*)|*.*|文本文件(*.TXT)|*.txt CommonDialog1.FilterIndex=1 CommonDialog1.ShowOpen Text1.Text=CommonDialog1.FileName Frame1.Caption=从打开对话框返回 Case 1 CommonDialog1.ShowSave Text1.Text=CommonDialog1.FileName Frame1.Caption=从另存为对话框返回“Case 2 CommonDialog1.ShowColor Text1.Text=从颜色对话框返回 Text1.ForeColor=CommonDialog1.Color Frame1.Caption=从颜色对话框返回,Case 3 CommonDialog1.Flags=3 Or 256 CommonDialog1.ShowFont With Text1.FontName=CommonDialog1.FontName.FontSize=CommonDialog1.FontSize.FontStrikethru=CommonDialog1.FontStrikethru.FontBold=CommonDialog1.FontBold.FontItalic=CommonDialog1.FontItalic.FontUnderline=CommonDialog1.FontUnderline.ForeColor=CommonDialog1.Color End With Text1.Text=从字体对话框返回 Frame1.Caption=从字体对话框返回 End SelectEnd Sub,