《多重窗体与环境应用.ppt》由会员分享,可在线阅读,更多相关《多重窗体与环境应用.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9章 多重窗体与环境应用9.1 多重窗体多重窗体9.2 Visual Basic工程结构工程结构 9.1 9.1 多重窗体多重窗体 多重窗体管理多重窗体管理 设置启动窗体设置启动窗体 窗体处理窗体处理 9.1.4 多重窗体应用实例多重窗体应用实例 9.1.1 多重窗体管理多重窗体管理1.向工程中添加窗体向工程中添加窗体向工程中添加新窗体有以下三种方法:选择“工程”“添加窗体”菜单,在打开的“添加窗体”对话框中,选择“窗体”打开,即向工程中添加一个新窗体。新窗体的默认名称和标题(Caption属性)均由集成开发环境自动排列确定,如第二个创建的窗体,其默认的名称为Form2,标题为Form2。从
2、工具栏上选择“添加窗体”按钮,向工程中添加一个新窗体。在工程资源管理器中选定“工程”,单击右键打开快捷菜单,选则“添加”“添加窗体”选项,也可创建一个新窗体。2.移除工程中的窗体移除工程中的窗体移除工程中多余的窗体有以下两种方法:在工程资源管理器窗口中选定要删除的窗体,选择“工程”“移除窗体”菜单项。在工程资源管理器中选中要删除的窗体,单击右键弹出其快捷菜单,选取“移除窗体”选项。3.保存窗体保存窗体 在多重窗体应用程序中,每个窗体都要单独保存,方法同单一窗体应用程序一样。在工程资源管理器窗口中选定要保存的窗体,选择“文件”“保存窗体”菜单或“窗体另存为”菜单,或者在工程资源管理器中打开快捷菜
3、单,选取“保存窗体”或“窗体另存为”选项。每个窗体保存后都生成一个扩展名为“.frm”的文件。9.1.2 设置启动窗体设置启动窗体 在多重窗体应用程序中,由于应用程序由多个窗体组成,就是由多个界面组成,因此在程序开始运行时,必须有一个窗体是首先出现的,即启动窗体。VB集成开发环境在创建新工程时,把窗体Form1作为系统缺省的启动窗体。如果用户在实际应用或在调试程序中希望把某个窗体作为启动窗体,在程序运行时首先出现在屏幕上,可用以下方法实现:选择“工程”“工程属性”菜单,在“工程属性”对话框中选中“通用”选项卡。在“启动对象”下拉列表中显示了该工程所有的窗体和“Sub Main”过程,用户可以根
4、据需要进行选择。若选用Sub Main过程作为启动对象,则在程序启动时不加载任何窗体,而是运行一个Sub Main过程,然后根据程序代码来决定是否加载窗体或加载哪一个窗体。9.1.3 窗体处理窗体处理 在使用相关语句和方法前,大家有必要先了解窗体在应用程序中的三种存在形式:没有被加载:这时,窗体虽然是应用程序的构件,但并没有正式成为项目的组成部分,即窗体不会占用系统资源。加载但没有显示:这时,窗体已经被加载,成为项目的组成部分,但并没有显示出来。加载并显示:这时,窗体已经被正式显示出来,当然窗体一定要被加载后才能显示出来。如果应用程序中只有一个窗体,在程序运行时这个窗体会被自动加载并显示出来。
5、如果应用程序由多个窗体组成,则会有一个窗体被设置为启动窗体。在程序运行时启动窗体同样被自动加载并显示,而其他的窗体则必须在已经启动的窗体中进行加载或显示,这就要用到下面几个相关语句和方法。1.Load语句语句格式:Load 该语句用于将一个窗体装入内存。执行Load语句后,窗体处于“加载但没有显示”状态,此时可以引用窗体中的控件及各种属性,但窗体没有显示出来。2.Unload语句语句格式:Unload 该语句用于卸载内存中指定的窗体,与Load语句的功能相反。执行Unload语句后,窗体处于“没有被加载”状态,不会占用系统资源。注:应用程序结束后,应卸载所有的窗体,否则会出现这种现象,即应用程
6、序虽已表现为结束状态,但实际上某个窗体仍处于隐藏状态,并占用一定系统资源。Windows系统本身不会自动处理此类问题,这对于程序的运行是极为不利的。为了避免这种情况,应在结束程序前使用Unload语句将窗体从内存中删除。3.Show方法方法格式:窗体名称.Show 模式该方法用于显示一个窗体。执行Show方法后,窗体处于“加载并显示”状态。窗体名称:可选项,缺省时为当前窗体。模式值:可选项,取值0(默认值)或1,用以决定窗体是非模态还是模态。模式值为0时,窗体为非模态,此时用户可对其他窗体进行操作;模式值为1时,窗体为模态,此时用户不能对其他窗体进行操作,直到该窗体关闭为止。注:该方法兼有装入
7、和显示窗体两种功能。也就是说,在执行Show方法时,如果窗体没有装入内存,则执行时Show方法会自动把窗体装入内存,然后显示出来。4.Hide方法方法格式:窗体名称.Hide该方法用于将窗体隐藏起来。执行Hide方法后,窗体处于“加载但没有显示”状态,即窗体仍在内存中,但窗体没有显示出来,与窗体卸载有本质的区别。9.1.4 多重窗体应用实例多重窗体应用实例 和单一窗体的程序设计一样,多重窗体程序设计也基本上分为5步:设计界面、设置属性、编写代码、调试运行、保存程序。关键的问题是作为一个完整的工程,如何把多个窗体“组装”起来,并根据程序功能实现窗体间的切换。下面通过一个简单的例子进行说明。例9.
8、1 设计一个手机话费查询系统,包含三个窗体,即“欢迎”窗体,“手机号码”窗体和“密码”窗体。三个窗体功能如下:1.“欢迎”窗体为封面窗体,运行时首先显示。单击“单击此处进入”按钮时,打开“手机号码”窗体,“欢迎”窗体消失。2.在“手机号码”窗体中输入手机号码后,单击“确定”按钮,则打开“密码”窗体,“手机号码”窗体消失;若单击“返回”按钮,则返回“欢迎”窗体。3.在“密码”窗体中输入密码后,单击“确定”按钮,只要密码非空则显示剩余话费;若单击“查询下一个”按钮,则返回“手机号码”窗体;若单击“返回”按钮,则返回“欢迎”窗体。通过该例可以发现,多重窗体应用程序中,通过相关按钮的设置,实现窗体的显
9、示与隐藏,从而将多个窗体连接成一个有机的整体。9.2 9.2 Visual BasicVisual Basic工程结构工程结构 标准模块标准模块 窗体模块窗体模块 Sub Main 过程过程9.2.4 闲置循环与闲置循环与DoEvents语句语句9.2.1 标准模块标准模块 在单一窗体应用程序中,所有的代码都存放在一个窗体模块中,而在多重窗体应用程序中,每个窗体对应一个窗体模块,有些公共变量或通用过程需要在多个窗体中共用,这就需要创建标准模块。标准模块由全局变量声明、模块级声明及通用过程等几部分组成,标准模块文件的扩展名为“.bas”。在标准模块中,全局变量用Public声明,模块级变量用Di
10、m或Private声明。当需要声明的全局变量或常量较多时,可以把全局变量声明放在一个单独的标准模块中。一个工程文件可以包含多个标准模块,也可以把原有的标准模块加入工程中。当一个工程中含有多个标准模块时,各模块中的过程不能重名。向工程中添加标准模块有以下三种方法:选择“工程”“添加模块”菜单,在打开的“添加模块”对话框中,选择“模块”打开,即向工程中添加一个标准模块,标准模块的默认名称为Module1。从工具栏上单击“添加窗体”按钮右侧的下拉箭头,在弹出的列表中选择“添加模块”选项。在工程资源管理器中选定“工程”,右击打开快捷菜单,选取“添加”项下的“添加模块”选项,也可创建一个标准模块。创建标
11、准模块后会打开一个标准模块窗口,即可进行公共变量、常量、类型、外部过程和公共过程的声明。9.2.2 窗体模块窗体模块 应用程序中的每个窗体都有一个包含其代码的窗体模块。窗体模块包括3部分内容,即通用声明部分、通用过程部分和事件过程部分,窗体模块文件的扩展名为“.frm”。如果在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。在窗体模块的通用声明部分中,用Dim语句声明的变量,其作用域为整个窗体模块,即该模块中的所有过程。通用声明部分一般放在代码的最前面,而通用过程和事件过程的位置没有严格的限制。在窗体模块中,可以调用标准模块中的过程,也可以调用其它窗体模块中的过程
12、。注意,被调用的过程必须用Public定义为公共过程。标准模块中的过程,可直接调用,若调用其它窗体模块中的过程,则必须加上过程所在的窗体名。9.2.3 Sub Main过程过程 Sub Main过程是在标准模块中建立的过程,通常是作为启动过程编写的。若选用Sub Main过程作为启动对象,则在程序启动时不加载任何窗体,而是运行一个Sub Main过程,然后根据程序代码来决定是否加载窗体或加载哪一个窗体。1.没有启动窗体时的启动没有启动窗体时的启动 有时候也许需要应用程序启动时不加载任何窗体。例如:可能想先运行装入数据文件的代码,然后根据数据文件的内容决定显示几个不同窗体中的哪一个。要做到这一点
13、,可以在标准模块中创建一个名为 Main 的子过程,如下面的例子所示。Sub Main()Dim intStatus As Integer 调用一个函数过程来检验用户状态 intStatus=GetUserStatus()根据状态显示某个启动窗体 If intStatus=1 Then frmMain.Show Else frmPassword.Show End IfEnd Sub需要注意的是,Sub Main过程必须在标准模块中创建,不能在窗体模块内。一个工程可以含有多个标准模块,但Sub Main过程只能有一个。Sub Main过程通常是作为启动过程编写的,但是Visual Basic并不
14、能够自动识别Sub Main过程,也就是说,并不自动把它作为启动过程。若将 Sub Main 过程设为启动对象,需要选择“工程”“工程属性”菜单,在“工程属性”对话框中选中“通用”选项卡,在“启动对象”下拉列表中选定“Sub Main”。2.显示启动时的快速显示显示启动时的快速显示 如果启动时有一个较长的执行过程,例如要从数据库中装入大量数据或者要装入一些大型位图,这时可能希望在启动时给出一个快速显示。快速显示是一个窗体,它通常显示的是诸如应用程序名,版权信息和一个简单的位图等内容。启动 Visual Basic 时所显示的屏幕就是一个快速显示。当一些启动例程正在执行时,快速显示能吸引用户的注
15、意,造成应用程序装载很快的错觉。当这些启动例程完成后,可以装载第一个窗体并卸载快速显示。对于快速显示的设计,应尽量简单为好。如果使用大量位图或者大量控件,则快速显示本身装载将会变慢。若要显示快速显示,需要将Sub Main 过程作为启动对象,并用 Show 方法显示该窗体:Private Sub Main()frmSplash.Show 显示快速显示 在此处添加启动过程。.frmMain.Show 显示主窗体 Unload frmSplash 卸载快速显示End Sub例9.2 设计一个“古诗选读”程序,该程序由7个窗体组成。分别为快速显示窗体、封面窗体、列表窗体以及4个用来显示古诗内容的窗体
16、。程序运行后,在装载数据时显示快速显示窗体,然后显示封面窗体并卸载快速显示,接着显示列表窗体,在该窗体中列出所要阅读的古诗目录(4个),双击某个目录后,在另一个窗体的文本框中显示相应的诗文内容。9.2.4 闲置循环与闲置循环与DoEvents语句语句 Visual Basic属于事件驱动型语言,即只有当发生某个事件时,才执行相应的程序,否则,应用程序会处于“闲置”状态。另一方面,当Visual Basic执行一个过程时,将停止对其它事件(如鼠标事件)的处理,直至执行完End Sub或End Function指令为止。为了改变这种执行顺序,VB提供了闲置循环(Idle Loop)和DoEvent
17、s语句。闲置循环就是当应用程序处于闲置状态时,用一个循环来执行其它操作。简言之,闲置循环就是应用程序在闲置状态下执行的循环。但执行闲置循环又会占用全部CPU时间,不允许执行其它事件过程。为此,Visual Basic提供了一个DoEvents语句,无论何时,一执行到DoEvents语句,就会把系统的控制权交给周围环境使用,然后再回到原来程序继续执行。DoEvents既可以作为语句使用,也可以作为函数使用。作为函数使用时,返回值为当前装入Visual Basic应用程序工作区的窗体号,如果不想使用这个返回值,则可以随便用一个变量接收返回值。DoEvents语句格式为:DoEventsDoEven
18、ts函数格式为:窗体号|变量名=DoEvents()例9.3 编写程序,试验闲置循环和DoEvents语句。窗体上有一个标签和两个命令按钮,当系统处于闲置状态时,标签显示“系统处于闲置状态”,同时不断右移;当按下“运行”按钮后,标签显示“正在运行程序”。程序运行后,首先执行Sub Main过程,显示出窗体后,执行闲置循环,使标签不断右移。当按下“运行”按钮后,发生了Command1的Click事件,执行到DoEvents语句时,程序会响应这个事件,暂停闲置循环,执行Command1_Click()事件过程,执行完该过程,程序又回到闲置循环继续执行,使标签继续右移。标签暂停移动的时间由Command1_Click()事件过程中的延时循环决定。当按下“退出”按钮时,则退出程序。