《【资格考试】 多重窗体与环境应用模版课件.ppt》由会员分享,可在线阅读,更多相关《【资格考试】 多重窗体与环境应用模版课件.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第8章章 多重窗体与环境应用多重窗体与环境应用 8.1 8.1 建立多重窗体应用程序建立多重窗体应用程序8.2 8.2 多重窗体应用程序的执行与保存多重窗体应用程序的执行与保存8.3 VB8.3 VB工程结构工程结构8.4 8.4 闲置循环与闲置循环与Do EventsDo Events语句语句 建立多重窗体应用程序,首先应该在工程中添加多个与用户交互的窗体;然后再设计这多个窗体之间的调用关系,以及窗体的加载、卸载、删除等操作;还包括各个窗体自身的功能实现。8.1.1多重窗体的添加多重窗体的添加 添加窗体的方法有四种:添加窗体的方法有四种:1单击单击“工程菜单中的工程菜单中的“添加窗体命令,
2、如图添加窗体命令,如图8-1。2直接点击工具栏的直接点击工具栏的“添加窗体按钮。添加窗体按钮。3单击工具栏的单击工具栏的“添加窗体按钮旁边的下拉菜单添加窗体按钮旁边的下拉菜单箭头,在出现的菜单中选择箭头,在出现的菜单中选择“添加窗体,如图添加窗体,如图8-2。图8-1 通过菜单添加窗体图8-2 通过工具栏添加窗体8.1 建立多重窗体应用程序建立多重窗体应用程序 图8-3 通过工程资源管理器添加窗体4工程资源管理器中,单击鼠标右键弹出快捷菜单,选择添加子菜单的“添加窗体项,如图8-3所示。任选这四种方法当中的一种操作,在出现的“添加窗体对话框中,选择“新建选项卡中的“窗体,单击“翻开按钮可以新建
3、一个窗体,或者选择“现存选项卡浏览并加载其它已经存在的窗体,如图8-4。注意:注意:1如果选择添加如果选择添加“现存窗体,当出现多个窗体的名称相同现存窗体,当出现多个窗体的名称相同而提示不能加载时,可以改变窗体的名称再添加。而提示不能加载时,可以改变窗体的名称再添加。2添加添加“现存窗体实际是在工程中包含对该文件的引用,现存窗体实际是在工程中包含对该文件的引用,多个工程共享窗体,对该窗体的修改将导致其它工程中该窗体的多个工程共享窗体,对该窗体的修改将导致其它工程中该窗体的变化,可以通过窗体变化,可以通过窗体“另存为命令以不同的文件名保存该窗体另存为命令以不同的文件名保存该窗体文件以取消共享。文
4、件以取消共享。图8-4 添加窗体8.1.2 多重窗体的设计多重窗体的设计1.1.引例引例学籍管理系统。系统启动,显示登录窗体如图8-5,输入用户名和口令点击“确定“按钮,如果用户名和口令均正确,将显示如图8-6的学籍管理系统主窗体,同时卸载登录窗体。图8-5 登录窗体图8-6 学籍管理系统主窗体 在主窗体中,选择点击修改密码菜单项,将弹出修改密码窗体,如图8-7。图8-7 修改密码窗体一般说来,多重窗体的设计可以按照以下步骤进行:1分析应用程序要求,划分功能模块。2分别创立各模块及其包含的各个窗体。3建立窗体之间的调用关系。4点击工程/属性菜单,在启动对象中选择系统运行时首先执行的对象。5运行
5、应用程序。多窗体设计常用方法:Load 装入窗体到内存。但并不显示该窗体。Unload 从内存中卸载窗体。只移走窗体的可视局部,而不包括窗体的命令和程序,和该窗体模块相关联的代码还保持在内存中。窗体名称.Show 模式 显示一个窗体。如果指定的窗体在此之前已由Load装载,那么显示之;如果调用Show方法时指定的窗体没有装载,VB将自动装载并显示该窗体。模式可取值0默认值或1。当模式为0即显示无模式窗体时,随后遇到的代码要执行,比方可以显示其它的窗体。当模式为1即显示模式窗体时,那么随后的代码直到该窗体被隐藏或卸载时才能执行。窗体名称.Hide 隐藏窗体,但并没有删除。续前引例,在登录窗体输入
6、用户名和口令,单击“确定按钮的代码在学籍管理系统主窗体单击修改密码菜单项的代码:Private Sub CmdOk_Click()声明变量 校验用户名和口令 If 用户名或密码错误 Then MsgBox 无此用户或密码错误,请重新输入!,vbCritical,错误 Else FrmMain.Show 载入主窗体 Unload Me 从内存删除登录窗体 End IfEnd Sub在修改密码窗体单击“取消按钮的代码:Private Sub mnuChangePsw_Click()单击修改密码菜单项 frmChangePsw.Show 显示修改密码窗体End SubPrivate Sub CmdC
7、ancel_Click()Unload Me 从内存删除修改密码窗体End Sub8.1.3 多文档界面多文档界面 指在一个父窗体下面可以同时翻开多个子窗体,同时显指在一个父窗体下面可以同时翻开多个子窗体,同时显示多个文档。示多个文档。1.创立和设计创立和设计MDI窗体及其子窗体窗体及其子窗体新建一个新建一个VB工程,选择工程,选择“工程菜单的工程菜单的“添加添加MDI窗体子菜窗体子菜单,在单,在“添加添加MDI窗体对话框中选择新建窗体对话框中选择新建“MDI窗体图标,窗体图标,单击单击“翻开按钮在工程中添加一个翻开按钮在工程中添加一个MDI窗体,如图窗体,如图8-8。图8-8 添加MDI窗体
8、MDI窗体的子窗体就是一般的标准窗体,但是必须把MDIChild属性置为True。2.MDI窗体与子窗体的交互窗体与子窗体的交互MDI窗体的两个属性:窗体的两个属性:ActiveForm和和ActiveControl。MDI应用程序运行时,任何时候只有一个子窗体是激活的,这个应用程序运行时,任何时候只有一个子窗体是激活的,这个子窗体具有输入焦点。子窗体具有输入焦点。ActiveForm返回活动窗体。返回活动窗体。例如:例如:Unload ActiveForm语句指关闭当前活动子窗体。语句指关闭当前活动子窗体。ActiveControl返回拥有焦点的控件。返回拥有焦点的控件。例如:例如:Acti
9、veForm.ActiveControl.SelText引用引用MDI子窗体的活动子窗体的活动控件中的文本。控件中的文本。QueryUnload事件卸载事件卸载MDI窗体。窗体。QueryUnload事件是在任一个卸载之前在所有窗体中发生,它提事件是在任一个卸载之前在所有窗体中发生,它提供了停止窗体卸载的时机,在关闭一个应用程序之前确保包含在供了停止窗体卸载的时机,在关闭一个应用程序之前确保包含在该应用程序中的窗体中没有未完成的任务。该应用程序中的窗体中没有未完成的任务。3.多文档界面应用程序中的多文档界面应用程序中的“窗口菜单窗口菜单 VB的Arrange方法提供了MDI子窗体的各种排列方式
10、,包括“水平平铺、“垂直平铺、“层叠和“排列图标。Arrange方法的语法格式如下:MDI窗体.Arrange 方法值 要在某个菜单上显示所有翻开的子窗体标题,可以利用菜单编辑器选定该菜单的显示窗口列表项或将该菜单的WindowList属性设置为True。表8-1Arrange方法值 图8-9 多文档录入例例8-1新建一个工程,包含两个窗体:主窗体新建一个工程,包含两个窗体:主窗体MDIForm1和文档录和文档录入窗体入窗体frmDocument。其中。其中MDIForm1是是MDI窗体,窗体,frmDocument窗体为子窗体即窗体为子窗体即MDIChild属性设置为属性设置为True。MD
11、IForm1窗体窗体“文件菜单包含文件菜单包含“新建、新建、“关闭和关闭和“退出退出三个子菜单;三个子菜单;“窗口菜单包含窗口菜单包含“水平平铺、水平平铺、“垂直平铺、垂直平铺、“层叠和层叠和“排列图标排列图标。frmDocument窗体上只有一个文本框窗体上只有一个文本框控件控件Text1,用以录入文本。,用以录入文本。将MDIForm1设置为启动窗体见8.2.1节,运行程序,首先载入MDIForm1窗体,并自动新建“文档1,如图8-9所示。图8-10 新建文档2图8-11 窗口菜单图8-12垂直平铺窗口单击“文件菜单的“新建项,在主窗体中出现另外一个编辑文档窗口“文档2,如图8-10。在“
12、窗口菜单中可以看见这两个窗口的名字“文档1和“文档2,并且当前“文档2为活动窗口,如图8-11。选择窗口菜单中的“垂直平铺,排列窗口的效果如图8-12。8.2 多重窗体应用程序的执行与保存多重窗体应用程序的执行与保存 图8-13 设置启动窗体8.2.1 设置启动窗体设置启动窗体设置启动窗体的一般操作步骤:设置启动窗体的一般操作步骤:1从从“工程菜单中,单击工程菜单中,单击“工程属性选项。或工程属性选项。或者在工程资源管理器中点击鼠标右键弹出快捷菜单,者在工程资源管理器中点击鼠标右键弹出快捷菜单,选择选择“工程属性项。工程属性项。2在在“工程属性对话框中,选择工程属性对话框中,选择“通用选项卡。
13、通用选项卡。3在在“启动对象下拉列表框中,选择作为启动窗启动对象下拉列表框中,选择作为启动窗体的窗体。体的窗体。4单击单击“确定按钮。确定按钮。8.2.2 多重窗体工程的保存与翻开多重窗体工程的保存与翻开 在建好或修改完多重窗体工程后,执行VB“文件菜单的“保存工程或“工程另存项,保存工程中每个窗体文件和工程文件。翻开多重窗体程序,可以执行“文件菜单中“翻开工程命令,在弹出的对话框中选择该程序的工程文件.vbp,系统将自动翻开并装载该工程的所有文件。在“文件菜单中选取“生成.exe,从翻开的“生成工程对话框选择存放可执行文件的文件夹,并在文件名框内输入文件名,按“确定按钮即可生成该工程的可执行
14、文件,如图8-14。图8-14生成可执行文件8.3 VB工程结构工程结构 VB工程包括工程文件.vbp、窗体模块.frm、窗体的二进制数据文件.frx、标准模块.bas、类模块.cls、资源文件.res、ActiveX控件文件.ocx、用户控件.ctl和属性页模块.pag、及其它Activex控件、设计器、可插入对象等部件和引用。本节主要介绍窗体模块和标准模块。8.3.1 窗体模块窗体模块 在工程中创立一个窗体,那么同时创立一个窗体模在工程中创立一个窗体,那么同时创立一个窗体模块块*.frm,VB工程可以包含一个或多个窗体模块。工程可以包含一个或多个窗体模块。窗体模块通常包括窗体可见设计局部和
15、代码局部。代码窗体模块通常包括窗体可见设计局部和代码局部。代码局部包括声明、通用过程和事件过程。假设窗体中对象局部包括声明、通用过程和事件过程。假设窗体中对象含有二进制属性,保存该窗体时将自动生成同名的二进含有二进制属性,保存该窗体时将自动生成同名的二进制数据文件,扩展名为制数据文件,扩展名为.frx。窗体模块中如果包含Form_Load过程,窗体启动时将首先执行该过程。窗体模块可以调用在该应用程序内其它窗体模块中定义的公共函数或过程即以Public定义,但在调用时必须加上被调过程所在窗体的窗体名作为限定词,调用格式:.过程或函数名参数列表 例例8-2在在Form1中单击中单击“输入按钮输入按
16、钮CmdInput输入进行计算输入进行计算的数据个数及数据,单击的数据个数及数据,单击“计算按钮计算按钮CmdCalculate,可引,可引用在用在Form2中定义的求数组中最小值的公共函数计算输入的数据中定义的求数组中最小值的公共函数计算输入的数据中的最小值。中的最小值。图8-15 引用其它窗体定义的函数Private Sub CmdInput_Click()“输入按钮 On Error GoTo PROC_ERR 错误处理,转向标号PROC_ERR处执行 b=num=InputBox(输入进行计算的数据个数:)ReDim a(num)For i=0 To num-1 输入num个进行计算的
17、数据 a(i)=InputBox(输入第&i+1&个数据:)b=b&Str$(a(i)&,Next i Text1.Text=b Text2.Text=CmdCalculate.Enabled=TruePROC_ERR:Exit SubEnd SubPrivate Sub CmdCalculate_Click()“计算按钮 mindata=Form2.min(a(),num)引用Form2中定义的计算最小值的函数 Text2.Text=Str$(mindata)End SubForm2中定义的代码:Function min(b()As Integer,n As Integer)求n个数中最小值
18、 Dim temp As Integer,i As Integer temp=b(0)For i=1 To n-1 If b(i)temp Then temp=b(i)End If Next i min=tempEnd Function思考:思考:将语句mindata=Form2.min(a(),num)改为mindata=min(a(),num),如何?窗体模块还可以直接调用标准模块中定义的公共函数或过程,此时无需限定词。8.3.2 标准模块标准模块 标准模块包括全局变量和常量声明、公共过程和函数、以及模块级声明。模块级声明是声明在标准模块中使用的变量和常量。模块级变量用Dim声明,全局变量
19、用Public声明。标准模块的文件扩展名为.bas,一个应用程序中可以包含多个这样的标准模块文件。图8-16 添加模块添加方法:执行添加方法:执行“工程菜单中工程菜单中“添加模块,或者在添加模块,或者在“工程资工程资源管理器窗口点击鼠标右键从弹出的快捷菜单中选择源管理器窗口点击鼠标右键从弹出的快捷菜单中选择“添加模添加模块,在出现块,在出现“添加模块对话框中选择添加模块对话框中选择“新建选项卡,如图新建选项卡,如图8-16。注意:在标准模块定义的公共函数或过程可以在所有窗体模注意:在标准模块定义的公共函数或过程可以在所有窗体模块中直接调用,无需加上该标准模块名作为限定。块中直接调用,无需加上该
20、标准模块名作为限定。如果例如果例8-2的的Form2的代码定义在标准模块中,那么的代码定义在标准模块中,那么Form1中中引用标准模块中定义的计算最小值函数的语句为引用标准模块中定义的计算最小值函数的语句为mindata=min(a(),num)即可。即可。8.3.3 Sub Main过程过程 在运行启动窗体之前需要进行一些初始化的工作或者先运行装入数据文件的代码,再根据初始化的结果或数据文件的内容决定显示几个不同窗体中的一个,可利用Sub Main过程控制。例如:Sub Main()Dim Status As Integer 调用一个函数过程来检验当前状态。Status=GetStatus(
21、)根据状态显示不同窗体。If Status=1 Then Form1.Show Else Form2.Show End IfEnd Sub创立方法:翻开一个标准模块代码窗口,输入创立方法:翻开一个标准模块代码窗口,输入“Sub Main回车,回车,然后在该过程中编写代码即可。然后在该过程中编写代码即可。注意:注意:1Sub Main是一个子过程且必须建立在一个标准模块中,并是一个子过程且必须建立在一个标准模块中,并且一个程序中只能有一个且一个程序中只能有一个Sub Main。2如果程序中设计了如果程序中设计了Sub Main,那么程序必须从,那么程序必须从Sub Main开开始执行。始执行。8
22、.4 闲置循环与闲置循环与Do Events语句语句 闲置循环就是当应用程序处于闲置状态时,用一个循环来执行即闲置循环。当执行闲置循环时,将占用全部CPU的时间,不允许再执行其他事件过程。DoEvents语句可以将控制切换到操作环境内核,此环境中的所有应用程序都有时机响应待处理事件。这使得应用程序不放弃焦点,其它事件和程序也能得到响应。例例8-3界面设置两个命令按钮界面设置两个命令按钮Cmd1Caption属性为属性为“按键运行按键运行和和CmdExitCaption属性为属性为“退出、两个标签退出、两个标签Caption属性分别为属性分别为“文本框文本框1和和“文本框文本框2,两个文本框,两
23、个文本框Text1和和Text2用于显示运行结果,如图用于显示运行结果,如图8-17。图8-17 Doevents示例Cmd1_Click代码:Private Sub Cmd1_Click()Dim i As Integer,j As Long For i=1 To 20 Text1.Text=i For j=1 To 50000 Next j Next i Text2.Text=“FinishedEnd Sub程序运行,直接在文本框Text1中出现20,同时文本框Text2中出现“Finished。Cmd1_Click修改后代码:Private Sub Cmd1_Click()Dim i A
24、s Long,j As Long For i=1 To 20 Text1.Text=i For j=1 To 50000 DoEvents Next Next Text2.Text=FinishedEnd Sub文本框Text1中显示由1变化到20,然后文本框Text2中出现“Finished。这是因为在执行内层较长循环的时候系统非常繁忙,可以调用DoEvents函数释放系统内存来完成其他请求。注意:对于应用程序中的关键局部需要独占计算机的资源时,必注意:对于应用程序中的关键局部需要独占计算机的资源时,必须防止其他任何中断如键盘、鼠标等,那么不能使用须防止其他任何中断如键盘、鼠标等,那么不能使用DoEvents。