多模块程序设计与调试_第1页
多模块程序设计与调试_第2页
多模块程序设计与调试_第3页
多模块程序设计与调试_第4页
多模块程序设计与调试_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多模块程序设计与调试1第1页,共29页,2023年,2月20日,星期四第十一章多模块程序设计与调试11.1多模块程序设计11.2程序的调试2第2页,共29页,2023年,2月20日,星期四11.1多模块程序设计本节知识点:启动对象窗体的加载与卸载窗体加载时的事件窗体卸载时的事件多模块之间的数据共享程序的中止3第3页,共29页,2023年,2月20日,星期四11.1多模块程序设计到目前为止所编制的程序都是单模块程序。但在实际工作中,功能稍微复杂一些的程序就会包含多个模块。VB包含三种类型的模块:窗体模块、标准模块和类模块。窗体模块(.frm):是一个相对独立的程序单位,每个窗体对应一个窗体模块。窗体模块包含窗体、窗体和控件的属性设置、事件过程和通用过程、模块级的变量和常量。默认时应用程序只有一个窗体,如应用程序有多个窗体,会有多个以.frm为扩展名的窗体模块文件。4第4页,共29页,2023年,2月20日,星期四11.1多模块程序设计标准模块(.bas):标准模块没有界面对象,只有代码。专门用来存放工程中各个窗体共同使用的全局通用过程、变量、常量及自定义数据类型。标准模块的代码保存在扩展名为“.bas”的文件中。类模块(.cls):类模块用于建立新对象,这些新对象可以包含自定义的属性和方法。类模块既包含代码又包含数据,它可以被应用程序内的过程调用。5第5页,共29页,2023年,2月20日,星期四11.1多模块程序设计1、启动对象启动对象:是指一个程序运行时,首先被加载并执行的对象。可以是窗体模块也可以是标准模块。设定工程的启动对象:SubMain过程:在一个含有多窗体的应用程序中,有时需要在显示多个窗体之前对一些条件进行初始化,需要在启动程序时执行一个特定的过程。在VB中,这样的过程称为启动过程,并命名为SubMain。

SubMain过程位于标准模块中,一个工程只能有一个SubMain过程。6第6页,共29页,2023年,2月20日,星期四11.1多模块程序设计没有窗体的工程:虽然VB自动为每个标准EXE工程提供了一个窗体,但工程可以没有任何窗体。在没有窗体的工程中,至少要有一个标准模块,标准模块中要有SubMain过程,并已设为启动对象。这时的SubMain过程是程序的入口,它可以再调用其他过程来完成更复杂的任务。当由SubMain调用的所有过程执行完毕后,程序就结束了。7第7页,共29页,2023年,2月20日,星期四11.1多模块程序设计在一个既有窗体又有SubMain过程的工程中,如没有将SubMain设为启动对象,它就是一个普通过程。一个工程必须有一个启动对象,默认启动对象是第一个被创建的窗体。8第8页,共29页,2023年,2月20日,星期四11.1多模块程序设计2、窗体的加载与卸载作为启动对象的窗体是由操作系统加载的,其他窗体只有使用VB的窗体加载语句或方法才能加载到内存中,执行时显示在屏幕上。当窗体操作完毕,可以将它隐藏或从内存中卸载。下面学习与窗体加载和卸载有关的语句和方法。9第9页,共29页,2023年,2月20日,星期四11.1多模块程序设计Load语句窗体在显示之前,首先要加载到内存中。语法:Load窗体名使用Load语句加载到内存的窗体并不被显示。窗体一旦被加载到内存,便可通过程序对它及其所属控件进行操作。(通过设置Visible属性,使其可见)例子:PrivateSubForm1_Click()

LoadForm2 EndSub10第10页,共29页,2023年,2月20日,星期四11.1多模块程序设计Show方法窗体对象的方法。当调用这个方法时,如果窗体尚未被加载到内存,则先加载到内存,然后再显示它。语法: 窗体名.Show[0|1]参数为0或被省略时,显示窗体后,继续执行后面的语句。即非模态的。参数为1时,显示窗体并暂停执行后面的语句。即模态的。只有隐藏或卸载了模态窗体之后,才继续执行后面的语句。11第11页,共29页,2023年,2月20日,星期四11.1多模块程序设计Hide方法调用窗体的Hide方法可以隐藏这个窗体。语法:

窗体名.Hide此方法同时将窗体的Visible属性置为False,但不卸载窗体。如果在执行此方法之前窗体尚未加载,则加载它。12第12页,共29页,2023年,2月20日,星期四11.1多模块程序设计Unload语句使用Unload语句可把指定的窗体从内存中卸载。 语法: Unload窗体名Unload语句卸载掉的只是窗体和控件的显示部分,它的代码(如过程和变量)仍然可用。窗体卸载之后,运行时对窗体和控件属性进行的所有修改都将丢失。程序中对该窗体与窗体上控件的访问会导致窗体重新加载。单击窗体右上角的“关闭”按纽也可卸载窗体。13第13页,共29页,2023年,2月20日,星期四11.1多模块程序设计3、窗体加载时的事件窗体从未被加载到加载,再由加载到显示,会依次收到系统引发的Initialize、Load和Active事件。Initialize事件窗体的初始化事件。在加载一个窗体时,此事件最先发生。事件过程语法:

PrivateSubForm_Initialize() …… EndSub14第14页,共29页,2023年,2月20日,星期四11.1多模块程序设计Load事件由于Load事件是窗体“生存周期”(从加载到卸载)中仅次于Initialize事件发生的事件,所以一般在该事件过程中加入窗体的初始化代码。过程语法:

PrivateSubForm_Load() …… EndSub注意:Load事件发生时,窗体并未显示,所以在该事件过程中不应有绘图和设置焦点的行为。15第15页,共29页,2023年,2月20日,星期四11.1多模块程序设计Activate事件当窗体被激活变为活动窗体时引发Activate事件。激活的例子:窗体标题栏由灰色变为蓝色,使用鼠标点击。事件过程语法:

PrivateSubForm_Activate() …… EndSub注意:与Initialize事件和Load事件不同,Activate事件在窗体的一个生存周期内可以多次触发,除了第一次显示窗体外,每次窗体被激活时,都会触发此事件。可在该事件过程中绘图和设置焦点。16第16页,共29页,2023年,2月20日,星期四11.1多模块程序设计4、窗体卸载时的事件窗体在卸载时会依次收到系统发送的四个事件:Deactivate、QueryUnload、Unload、Terminate

。Deactivate事件当窗体由活动变为非活动时触发此事件。过程语法: PrivateSubForm_Deactivate() …… EndSub17第17页,共29页,2023年,2月20日,星期四11.1多模块程序设计QueryUnload事件当窗体要被卸载之前,先引发此事件。过程语法:

PrivateSubForm_QueryUnload(CancelasInteger,UnloadModeasInteger) …… EndSub参数UnloadMode传递给事件过程的值可以反映卸载是如何引起的。该参数值与所代表的意义见表11.118第18页,共29页,2023年,2月20日,星期四11.1多模块程序设计参数Cancel可以用来终止窗体的卸载。可在该事件过程中为Cancel参数赋一个非0值,终止窗体的卸载。而值为0或不赋值,则继续卸载。可以在QueryUnload事件过程中提示用户对未保存的工作进行保存。或者根据各种情况决定是否继续进行窗体卸载。被终止卸载的窗体,仍然显示在屏幕上并保持激活状态。19第19页,共29页,2023年,2月20日,星期四11.1多模块程序设计【例11.1】PrivateSubCommand1_Click()UnloadMeEndSubPrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)DimiAsIntegerIfUnloadMode<>1ThenMsgBox"请单击“关闭”按钮退出本程序。",vbInformationCancel=1ExitSubEndIfi=MsgBox("数据尚未保存,是否保存?",vbYesNoCancel+vbQuestion)Ifi=vbYesThen'选择"是"则执行保存代码

MsgBox"数据已保存。",vbInformation'Save'进行相应的保存操作

ElseIfi=vbCancelThen'选择"取消"则停止卸载

Cancel=1EndIfEndSub20第20页,共29页,2023年,2月20日,星期四11.1多模块程序设计Unload事件如果QueryUnload事件过程未终止窗体的卸载,当窗体从屏幕上消失时,会继续引发Unload事件。语法:

PrivateSubForm_Unload(CancelasInteger) …… EndSubCancel参数的作用同上。在事件过程中将其值设置为非0,可以阻止窗体卸载。Unload事件过程中,适合进行关闭文件、清除所占系统资源的工作。21第21页,共29页,2023年,2月20日,星期四11.1多模块程序设计Terminate事件是窗体卸载过程中的最后一个事件,事件过程语法:

PrivateSubForm_Terminate() …… EndSub22第22页,共29页,2023年,2月20日,星期四11.1多模块程序设计5、多模块之间的数据共享VB的工程通常由多个模块组成,各个模块之间即相互独立又相互联系,模块之间可以共享代码和数据.共享代码:通过调用定义在其他模块中的全局通用过程实现。共享数据:通过以下四种方法实现。使用全局变量、全局常量和全局数组。使用对象属性。使用过程参数。使用文件。23第23页,共29页,2023年,2月20日,星期四11.1多模块程序设计使用全局变量、全局常量和全局数组在程序内部进行数据交换。一个模块的代码可以存取另一个模块中定义的全局变量、全局数组或全局变量.使用对象属性VB允许一个模块的程序代码访问另一个模块中对象的属性和方法。例子:PrivateForm_Click()'窗体Form1的事件过程

Form2.Text1.Text=“你好!”

EndSub24第24页,共29页,2023年,2月20日,星期四11.1多模块程序设计使用过程参数一个模块的代码调用另一个模块中定义的全局过程时,可以通过参数将数据从一个模块传递到另一个模块。使用文件一个模块以文件形式将数据保存在磁盘上,另一个模块读取该文件,可以实现数据共享。25第25页,共29页,2023年,2月20日,星期四11.1多模块程序设计6、程序的终止程序的终止就是程序的关闭或退出,VB应用程序一般由多个模块组成,程序的终止体现为模块全部从内存中卸载。Unload语句使用Unload语句可以卸载窗体,终止程序。End语句End语句可以强行终止程序的执行。同时关闭文件、清除变量、且不向窗体发送任何事件。26第26页,共29

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论