6.3 多重窗体 6.2.8 自定义对话框 自定义对话框是用户所创建的含有控件的窗体。这些窗体包括命令按钮、单选钮、复选钮和文本框等,它们可以为应用程序接收信息。因此,创建自定义对话框就是建立一个窗体,在窗体上根据需要放置控件,通过设置属性值来自定义窗体的外观。 一般来说,作为对话框的窗体与一般的窗体在外观上是有所区别的,对话框没有最大化、最小化按钮,不能改变它的大小,所以应设置对话框的属性如表6-13所示。 表6-13 自定义对话框属性设置 属性 BorderStyle ControlBox MaxButton MinButton 1 Fasle Fasle Fasle 属性值 取消控制菜单框 取消最大化按钮 取消最小化按钮 说明 边框类型为固定的单边框,运行时不能改变对话框尺寸 一般来说,对话框必须至少包含一个退出该对话框的命令按钮。通常用两个命令按钮:其中一个按钮开始执行动作,而另一个按钮关闭该对话框而不做任何改变。典型情况是,这两个按钮Caption属性设置为“确定”与“取消”。在这个设计方案中,“确定”命令按钮的Default属性设置为True,而“取消”命令按钮的Cancel属性设置为True。 1.自定义对话框的种类 自定义对话框分为两种类型,即模式对话框和无模式对话框。 (1)模式对话框 在可以继续应用程序的其他部分之前,必须关闭模式对话框(隐藏或卸载)。如果一个对话框在切换到其他窗体或对话框之前要求先单击“确定”或“取消”,则它是模式的。 例如:Visual Basic中的“打开工程”对话框是模式的,如图6-23在没有关闭该对话框之前,不能处理Visual Basic中的其他操作。 图6-23 模式对话框示例 (2)无模式对话框 无模式对话框允许在对话框与其他窗体之间转移焦点而不用关闭对话框。当对话框正在显示时,可以在当前应用程序的其他地方继续工作。例如,Visual Basic中的“查找”对话框是无模式的,如图6-24所示。无模式对话框较少使用。
图6-24 无模式对话框示例
2.自定义对话框的使用
对于自行定义的对话框窗体,可以使用窗体的Show方法。格式为: 窗体对象. Show [style [, owner ]] 说明:
(1)style参数表示模式风格,取值如下: vbModal:显示为模式对话框。
vbModeless(缺省值):显示为无模式对话框。
例如,将frmInput窗体显示为模式对话框,应使用代码: frmInput .Show VbModal
(2)owner参数可用来指定窗体的父子关系。
例如,frmInput .Show vbModal ,frmMain 表示将frmInput显示为frmMain的无模式子窗体。
在Show方法中使用owner参数,确保对话框在它的父窗体最小化时它也最小化,或者在其父窗体关闭时它也卸载。
要卸载或隐藏自定义对话框,可以在对话框的“确定”或“取消”命令按钮的单击事件中使用Unload方法或Hide方法。
6.3 多重窗体
对于较为简单的应用程序,一个窗体就足够了。对于复杂的应用程序,往往需要通过多重窗体(MultiForm)来实现。每一个窗体可以有不同的界面和程序代码,以完成不同的功能。如有的窗体用来输入数据,有的窗体用来显示结果等等。
1.添加窗体 单击“工程 | 添加窗体”命令或单击工具条上的“添加窗体”按钮,打开“添加窗体”对话框,单击“新建”选项卡来创建一个新的窗体;或者单击“现存”选项卡,将属于其他工程的窗体添加到当前工程中。
2.设置启动窗体
拥有多个窗体的应用程序,默认情况下,在设计阶段第一个创建的窗体为启动窗体。即应用程序开始运行时,先运行这个窗体。如果要改变系统默认的启动窗体,需要进行设置。设置启动窗体的方法:
单击“工程”菜单中的“工程属性”,打开“工程属性”对话框。在“通用”选项卡的“启动对象”列表框中选取要作为启动窗体的窗体或Main子程序,按下“确定”按钮。
3.与多窗体程序设计有关的语句和方法
多重窗体的操作需要在各个窗体之间进行切换,涉及到窗体的“建立”、“装入”、“显示”、“隐藏”、“删除”等操作。
(1)Load语句
Load语句的作用是将一个窗体装入内存。执行该语句后,可以引用窗体中的控件及各种属性,但此时窗体并没有显示出来。其语法格式为:
Load 窗体名称 (2)Unload语句
Unload语句的功能与Load语句相反,是将窗体从内存中删除。其语法格式为:
Unload 窗体名称
常用的Unload Me语句,其意义是关闭窗体自己。 (3)Show方法
Show方法是用来显示一个窗体,它兼有装入内存和显示窗体两种功能。也即,在执行Show时,如果窗体不在内存中,则Show自动把窗体装入内存,然后显示出来。其语法格式为:
[窗体名称.]Show [模式]
如果省略“窗体名称”,则表示当前窗体。
参数“模式”用来确定窗体的状态,有0和1两个值。若“模式”值为1(或常量vbModal)时,表示窗体是“模式型”窗体,也就是说,只有在关闭该窗体后才能对其他窗体进行操作。若“模式”值为0(或缺省)时,表示窗体为“非模式型”窗体,不用关闭该窗体就可以对其他窗体进行操作。
(4)Hide方法
用以隐藏窗体对象,但并没有从内存中删除。其语法格式为: [窗体名称.] Hide
如果调用 Hide 方法时窗体还没有装入内存,那Hide方法将装入该窗体但不显示它。
例6-10 多重窗体的应用。 程序要求:
(1)包含三个窗体和一个标准模块。
(2)主窗体是程序的主界面,提供用户选择操作,并根据用户的选择打开对应功能的窗体。主窗体的界面如图6-25所示。
图6-25 学生成绩处理程序主窗体界面
(3)在主窗体中选择“输入成绩”按钮后,打开输入成绩窗口,如图6-26所示。在窗体中输入一同学的四门课程的成绩后,当单击“返回”按钮时,将输入的成绩保存在全局变量中。
(4)在主窗体中选择“计算成绩”按钮后,打开计算成绩窗口,如图6-27所示。 图6-27 输出成绩界面 (5)在标准模块中,定义存放学生四门课程成绩的全局变量,Chinese,Math,English,Computer。 (6)评价学生的成绩等级按平均成绩>=90为优秀、80~89为良好、70~79为中等、60~69为及格、60分以下为不合格。在标准模块中编写评价学生成绩等级的函数过程。 操作步骤如下: (1)新建一个标准EXE工程。 (2)设计窗体 在Form1(主窗体)中放置三个按钮、一个标签;执行【工程|添加窗体】命令,新加窗体Form2(输入成绩),其中放置一个框架(框架中添加四个标签、四个文本框)、一个命令按钮;新加窗体Form3(计算成绩),其中有三个标签、三个文本框、一个命令按钮。按表6-14、表6-15、表6-16设置三个窗体及其上面各控件的主要属性。 (3)执行“工程”|“添加模块”命令,在工程中添加一个标准模块Module1。 表6-14 主窗体上各对象的主要属性设置 默认对象名称 Form1 Label1 Command1 Command2 Command3 设置对象名称(Name属性) FormMain 默认对象名称 标题属性(Caption属性) 学生成绩处理程序 学生成绩计算与评价 输入成绩 计算成绩 结束 标题属性 (Caption属性) CmdInput CmdOutput CmdEnd 设置对象名称 (Name属性) 表6-15 输入成绩窗体上各对象的主要属性设置 默认对象名称 其他属性
Form2 Label1 Label2 Label3 Label4 Text1 Text2 Text3 Text4 Command1 Frame1 FormInput 输入成绩 语文 默认对象名称 数学 英语 计算机 TxtChinese TxtMath TxtEnglish TxtComputer CmdReturn 默认对象名称 返回 学生成绩 无定义 Text属性空白 表6-16 计算成绩窗体上各对象的主要属性设置 默认对象名称 Form3 Label1 Label2 Label3 Text1 Text2 Text3 Command1 TxtSum TxtAver TxtDj CmdReturn 返回 无定义 Text属性空白 默认对象名称 设置对象名称 (Name属性) FormOutput 标题属性 (Caption属性) 计算并评价成绩 总 分 平均成绩 评价等级 其他属性 (3)编写程序代码。 标准模块Module1中定义全局变量,编写成绩评价的函数过程: Public Chinese As Single, Math As Single Public English As Single, Computer As Single Public Function CjDj (x As Single) As String Select Case x Case Is >= 90 CjDj = \优秀\ Case Is >= 80 CjDj = \优良\ Case Is >= 70 CjDj = \中等\ Case Is >= 60 CjDj = \及格\ Case Else CjDj = \不及格\ End Select End Function