收藏 分销(赏)

第10章多重窗体程序设计.doc

上传人:仙人****88 文档编号:7376035 上传时间:2025-01-01 格式:DOC 页数:11 大小:677KB 下载积分:10 金币
下载 相关 举报
第10章多重窗体程序设计.doc_第1页
第1页 / 共11页
第10章多重窗体程序设计.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
第10章 多重窗体程序设计 前面所接触的程序大多比较简单,每个程序大多只包含一个窗体,程序的所有代码都包含在该窗体模块中。在实际应用中,特别是对于较复杂的应用程序,单一窗体往往无法满足需要,只有将多个窗体配合使用,才能使Visual Basic的强大功能得以发挥。故当应用程序庞大复杂时,需要进行多重窗体程序设计。在多重窗体程序设计中,每个窗体可以有自己的用户界面和程序代码,完成不同的操作。 多重窗体程序可以包含若干不同的窗体,每个窗体的设计方法与单窗体程序没有什么不同,关键是要解决不同窗体之间的衔接和窗体的显示、关闭等问题。本章主要介绍关于多重窗体程序设计的一些基本语句和基本操作。 10.1 多重窗体的基本操作 10.1.1 添加窗体创建多重窗体程序的工程和第一个窗体的方法与单窗体程序相同,其他窗体需要一个一个地“添加”到工程中,方法是执行“工程”菜单下的“添加窗体”命令,或单击“标准”工具栏的“添加窗体”工具按钮??,弹出如图10-1所示的对话框,用户即可在当前工程中新建或添加一个事先已存在的窗体。 图10-1添加窗体对话框 每个窗体都有自己的名称,默认为FormX(X为1,2,3,…)。对于多重窗体程序,窗体名称是一个常用的属性,为便于理解和记忆,最好将窗体名称改为有意义的名字,如frmLogin代表用户登录窗体,frmMain是主窗体等。在窗体的代码中,可以使用Me关键字代表当前窗体的名称,例如: Private Sub Form_Load() Me.BackColor=RGB(127,234,111) End Sub 10.1.2 设置启动对象 在程序运行过程中,首先执行的对象称为启动对象。缺省情况下,第一个创建的窗体被指定为启动对象,即启动窗体。Visual Basic工程的启动窗体可以在启动程序后自动打开并显示在屏幕上,但每个工程最多只能有一个启动窗体。 对于多重窗体程序,缺省情况下,创建的第一个窗体被指定为启动窗体。要指定其他窗体作为启动窗体,可以单击“工程”菜单下的“工程属性”命令,显示如图10-2所示的对话框,在“启动对象”列表框中选择。 图10-2设置启动窗体 除了启动窗体外的其他窗体可以在程序代码中使用窗体的方法来打开。 10.1.3 有关窗体的语句和方法 1.窗体的加载和卸载 (1)Load语句 语法格式:Load 窗体名称 如:Load Form2 功能:Load语句用来加载指定窗体,即把一个窗体装入内存。执行Load语句后,可以引用窗体中的控件及各种属性,但此时窗体没有显示出来。加载窗体后,窗体的Load事件已被触发。 (2)Unload语句 语法格式:Unload窗体名称 功能:Unload语句用于卸载指定的窗体,即释放窗体所占内存。与Load语句相反,不论指定的窗体是显示在屏幕上还是被隐藏了,Unload语句都将从内存中清除指定的窗体。 例如,单击命令按钮cmdQuit时关闭当前窗体的程序代码为: Private Sub cmdQuit_Click() Unload Me End Sub 说明:在Visual Basic程序设计中常用关键字Me宋代替当前的窗体名。 2.窗体的常用方法 (1)Show方法 语法格式:[窗体名称].Show[模式] 功能:对于一个未装入内存的窗体,通过Show方法,可以将该窗体装入内存并显示出来;若窗体己通过Load语句装入内存,则通过Show方法可以显示该窗体。 说明: ①“窗体名称”为要显示的窗体名,缺省时表示将显示当前窗体。 ②“模式”参数为可选项,其取值只能是0或1,它的含义是:0表示非模态窗体 (vbModaless):1表示模态窗体(vbModal)。默认值为0。 ⑧模态窗体和非模态窗体的区别:模态窗体占用整个应用程序的控制权,在模态窗体显示的状态下,只有关闭该模态窗体,用户才能与其他窗体进行交互:而对于非模态窗体,用户在与该窗体交互的同时,还可以与其他窗体进行交互。因此,对于模态窗体,必须有能关闭该窗体的选项。 ④调用Show方法与将窗体的Visible属性值设置为True具有相同效果。 (2)Hide方法 语法格式:[窗体名称].Hide 功能:Hide方法将窗体隐藏,即不在窗体上显示,其作用与将Visible属性设置为False等效。窗体被隐藏后并没有从内存中消失,它与Unload语句的作用是不一样的。 10.2 Sub Main过程 在一个含有多个窗体或多个工程的应用程序中,有时候需要在显示多个窗体之前对一些条件进行初始化,这就需要在启动程序时执行一个特定的过程。在Visual Basic中,这样的过程称为启动过程,并命名为Sub Main,它类似于C语言中的Main函数。 如前所述,在一般情况下,整个应用程序从设计时的第一个窗体开始执行,需要首先执行的程序代码放在Form_Load事件过程中。如果需要从其他窗体开始执行应用程序,则 可通过“工程”菜单中的“工程属性”命令(“通用”选项卡)指定启动窗体。但是,如果有Sub Main过程,则可首先执行Sub Main过程。 Sub Main过程必须在标准模块中建立,而不能包含在窗体模块中。创建Sub Main过 程的方法是: (1)单击“工程”菜单下的“添加模块”命令,为当前工程添加一个标准模块。Visual Basic为标准模块提供的缺省名称是ModuleX(X为1,2,3,…)。 (2)打开标准模块的代码编辑窗口,在所有过程的外部输入“Sub Main”后按回车键,则产生对Sub Main过程的声明(如图10-3所示)。 图10-3 Sub Main过程建立窗口 Sub Main() End Sub (3)为Sub Main过程编写代码。 每个工程可以包含若干标准模块,但最多只能有一个Sub Main过程。除了窗体模块,工程的“启动对象”还可以是Sub Main过程,但不能是一个标准模块或其他过程。 在Sub Main过程中,通常包含程序的初始化代码,如全局变量的初始化等,还可以用 于在启动程序的主窗体前显示一个快速提示窗体。 Sub Main过程位于标准模块中。一个工程可以含有多个标准模块,但Sub Main过程只能有一个。Sub Main过程通常是作为启动过程编写的,也就是说,程序员编写Sub Main过程,总是希望作为第一个过程首先执行。但是与C语言中的Main()函数不同,Sub Main过程不能自动被识别。也就是说,Visual Basic并不把它自动作为启动过程,必须通过与设置启动窗体类似的方法把它指定为启动过程。若要设置Sub Main子过程为启动对象,则应在工程属性对话框(如图10—2所示)的“启动对象”下拉列表中选择“Sub Main”。 一般来说,窗体模块中的通用过程和标准模块中的过程只能通过按名称调用执行,Sub Main也不例外。但如果把Sub Main指定为启动过程,则可以在运行程序时自动执行。 Sub Main过程先于窗体模块执行,因此常用来设定初始化条件。例如: Sub Main() 初始化 …… Form2.show End Sub 该过程先进行所需要的初始化处理,然后显示一个窗体。有时候,也可以在Sub Main过程中指定其他过程的执行顺序。例如: Sub Main() Do Load Records() GetInput() SaveData() Loop End Sub 此例按顺序调用标准模块中的3个过程,直到程序结束。 10.3 闲置循环与DoEvents语句 Visual Basic是事件驱动型的语言。在一般情况下,只有发生事件时才执行相应的程序。也就是说,如果没有事件发生,则应用程序将处于“闲置”(Idle)状态。另一方面,当Visual Basic执行一个过程时,将停止对其他事件(如鼠标事件)的处理,直至执行完End Sub或End Function指令为止。也就是说,如果Visual Basic处于“忙碌”状态,则事件过程只能在过程中等待,直到当前过程结束。 为了改变这种执行顺序,Visual Basic提供了闲置循环(1dieLoop)和DoEvents语句。 所谓闲置循环,就是当前应用程序处于闲置状态时,用一个循环来执行其他操作。简言之,闲置循环就是在闲置状态下执行的循环。但是,在执行闲置循环时,将占用全部CPU时间,不允许执行其他事件过程,使系统处于无限循环中,可以用它把控制权交给周围环境使用,然后回到原来程序继续执行。 DoEvents既可以作为语句,也可以作为函数使用,一般格式为: [窗体号=]DoEvents[()] 当作为函数使用时,DoEvents返回当前装入Visual Basic应用程序工作区的窗体号。如果不想使用这个返回值,则可以随便用一个变量接受返回值。例如: Dummy=DoEvents() 作为语句使用时,可省略前后的选择项。 在窗体上画一个命令按钮,然后编写如下的事件过程: Private Sub Command1_Click() For i=1 To 2000000000 X=DoEvents For j=1 To 1000 Next j Cls Print i Next i End Sub 运行上面的程序,单击命令按钮,将在窗体左上角显示循环控制变量(i&)的值。由于加了延时循环,该程序的运行需要较长的时间。加入“x=DoEvents”后,可以在执行循环的过程中进行其他操作,如重设窗口大小、把窗体缩为图标、结束程序或运行其他应用程序等。如果没有DoEvents,则在程序运行期间不能进行其他任何操作。 可以看出,DoEvents给程序执行带来一定方便,但不能不分场合的使用。有时候应用程序的某些关键部分可能需要独占计算机的时间,以防止被键盘、鼠标或其他程序中断,在这种情况下,不能使用DoEvents语句。例如,当程序从调制解调器接受信息时,就不应使用DoEvents。 例如,编写程序,试验闲置循环和DoEvents语句。 (1)在窗体上建立3个命令按钮,设计如图10-4所示的界面。 图10-4 试验闲置循环 (2)执行“工程”菜单中的“添加模块”命令,打开标准模块窗口,编写如下程序: Sub main() Form1.Show Do While DoEvents() Form1.Command2.Left=Form1.Command2.Left+1 Beep Loop End Sub (3)对Form1窗体编写如下程序: Private Sub Command1_Click() FontSize=12 Print "执行Command1_Click事件过程" For i=l To 100000 X=i*2 Next i End Sub Private Sub Command3_Click() End End Sub (4)把Sub Main设置为启动过程。 程序运行后,没有事件发生,进入闲置循环,使标有“闲置循环”的命令按钮右移,并发出声响。 如果单击标有“单击此按钮”的命令按钮,则有事件发生,“闲置循环”按钮暂停移动,在窗体上显示相应的信息。然后“闲置循环”按钮接着移动。如果单击“退出”命令按钮,则退出程序,运行情况如图10-5所示。 图10-5试验闲置循环运行界面 注意:在高档微机上,当单击命令按钮1时,命令按钮2暂停移动的时间很短。 10.4 Visual Basic工程管理 以上介绍了多窗体程序设计的方法。现在,对以前所学内容进行简单回顾,了解Visual Basic的工程结构,对Visual Basic应用程序有一个总体印象。 在传统的程序设计中,编程者对程序的“执行顺序”是比较明确的。但是,在Visual Basic中,程序的执行顺序不太容易确定,也就是说,很难勾画出程序的执行“轨迹”。不过,从大的方面来说,还是“有序可循的”。 模块(Module)是相对独立的程序单元。在Visual Basic中主要有3种模块,即窗体模块、标准模块和类模块。类模块主要用来定义和建立ActiveX组件,本书不涉及与类模块有关的内容。下面主要介绍标准模块和窗体模块。 10.4.1 标准模块 标准模块也称全局模块或总模块,由全局变量声明、模块层声明通用过程等几部分组成。其中全局声明放在标准模块的首部,因为每个模块都可能有它自己的具有唯一名字的全局变量。全局变量声明总是在启动时执行。模块层声明包括在标准模块中使用的变量和常量。 当需要声明全局变量或常量较多时,可以把全局声明放在一个单独的标准模块中。这样的标准模块只含有全局声明而不含任何过程,因此Visual Basic解释程序不对它进行任何指令解释。这样的标准模块在所有基本指令开始之前处理。 在标准模块中,全局变量用Public声明,模块层变量用Dim或Private声明。 在大型模块中,主要操作在标准模块中执行,窗体模块用来实现与用户之间的通信。但在只使用一个窗体的应用程序中,全部操作通常用窗体模块就能实现。在这种情况下,标准模块不是必需的。 标准模块通过“工程”菜单中的“添加模块”命令来建立或打开。执行该命令后,显示“添加模块”对话框,如图10—6所示。利用这个对话框可以建立新模块(选择“新建”选项卡),也可以把已有模块添加到当前工程中(选择“现存”选项卡,打开文件对话框)。单击“打开”按钮,即可打开标准模块代码窗口,可在该窗口内键入或修改代码。在编辑完代码之后,可以用“文件”菜单中的“保存文件”命令存盘。标准模块作为独立的文件存盘,其扩展名为:.bas。 图10-6添加模块对话框 一个工程文件可以有多个标准模块,也可以把原有的标准模块加入工程中。当一个工程中含有多个标准模块时,各模块中的过程不能重名。当然,一个标准模块内的过程也不能重名。 Visual Basic通常从启动窗体指令开始执行。在执行启动窗体的指令前,不会执行标准模块中的Sub或者说Function过程,只能在窗体指令(窗体或控件事件过程)中调用。 10.4.2 窗体模块 窗体模块包括3部分内容,即声明部分、通用过程部分和事件过程部分。在声明部分中,用Dim语句声明窗体模块需要的变量,因而其作用于整个窗体模块,包括该模块内的每个过程。注意,在窗体模块代码中,声明部分一般放在最前面,而通用过程和事件过程的位置没有严格限制。 在声明部分执行之后,Visual Basic在事件过程部分查找启动窗体中的Sub Form_Load过程之后,将暂停指令执行,然后等待用户触发下一个事件。从表面上看,此时程序似乎什么事也没做,但应用程序仍处于运行(Run)状态,而不是中断(Break)状态。在Visual Basic中,可以运行一个不含任何源代码的应用程序。程序运行后,在屏幕上显示一个空窗体(通常为Form1)。这样的程序称为零指令程序。 窗体模块中的通用过程可以被本模块或其他模块中的事件过程调用。 一个Visual Basic应用程序有多种存盘文件,这些文件通过不同的扩展名来区别,包括.bas文件(标准模块)、.frm文件(窗体模块)、.cls(类模块)、.vbp(工程)、.bvg文件(上程组)等。在存盘时,这些文件分别保存,而在装入时,则只要装入.vbp(单工程)或.vbg文件(多工程)即可。装入.vbp或.vpg文件后,与该工程或工程组有关的所有.bas文件、.cls文件和.frm文件等都在工程资源管理器窗口中显示出来。 10.4.3 工程的组成 VB中的工程是组成一个应用程序的文件集合,因此Visual Basic程序的开发总是从创建工程开始。新建工程时,默认的工程名是“工程1”。 一个VB工程通常包括多种类型的文件,如图10-7所示。其中最通常的文件是工程文件、窗体文件和标准模块文件。 (1)工程文件 工程文件包含与该工程有关的全部文件、对象以及所设置的环境选项的信息。整个工程对应一个工程文件,扩展名为.vbp。 图10-7 工程文件的组成 (2)窗体文件 工程中的每一个窗体对应—个窗体文件,扩展名为.frm。窗体文件包含窗体及其控件有关属性的文本描述、常量或变量的声明以及窗体内的工程代码等。 说明:窗体中对象的数据(例如图片或图标)含有二进制属性,保存该窗体时将自动生成同名的窗体二进制数据文件,扩展名为.frx。 (3)标准模块文件 工程中的标准模块通常用来定义供其他窗体或模块引用的全局变量、变量、过程等。标准模块文件的扩展名为.bas。 10.4.4 工程的基本操作 工程的基本操作主要包括新建、打开和保存工程,在工程中添加、删除和保存文件,以及在工程中添加控件等。这些操作在前面的章节中已或多或少有所涉及,这里进行归纳与总结。 1.新建、打开和保存工程 (1)新建工程 每次启动Visual Basic时,系统都将打开一个“新建工程”对话框,通过“新建”选项卡可创建所选类型的工程。此外,在Visual Basic中执行“文件”菜单中的“新建工程”命令,也可新建工程。不过,后者在新建工程前会关闭当前系统。 (2)打开工程 启动Visual Basic时,通过“新建工程”对话框的“现存”和“最新”选项卡可打开已经保存的工程,如图10-8所示。其中,“最新”选项卡列出的是最近访问过的文件。此外,在Visual Basic中执行“文件”菜单中的“打开工程”命令,也可打开工程。同样,后者在打开工程前会关闭当前工程。 图10-8打开工程对话框 (3)保存工程 单击工具栏上的“保存工程”按钮或执行“文件”菜单中的“保存工程”命令,可保存当前工程及其所有模块,包括工程文件、窗体文件和标准模块文件等。执行“文件”菜单中的“工程另存为”命令,是用指定文件名保存当前工程的工程文件。 2.在工程中添加、删除和保存文件 (1)添加文件 执行“工程”菜单中的“添加…”命令,可在当前工程中添加指定类型的文件。例如,选择“添加窗体”命令,可添加一个新建窗体或现存窗体。 说明:在当前工程中添加现存的文件时(例如,添加其他工程中的窗体),并不是添加该文件的副本,而只是简单的在工程中包含对该文件的引用。如果改变并保存了所添加的文件,则将对包含该文件的所有工程造成影响。为避免添加的文件影响该文件原来的工程,最好在文件添加后执行“另存为”操作,以新文件名保存所添加的文件。 (2)移除文件 在工程资源管理器中选定待移除的文件,执行快捷菜单中的“移除…”命令(如图10-9所示)或执行“工程”菜单中的“移除…”命令,可从工程中移除该文件。 这里需要指出,如果从该工程中移除的是已经保存过的文件,则该文件并没有被删除,仍存在于磁盘上,需要时还可以添加。 图10-9 移除文件 (3)保存文件 执行“文件”菜单中的“另存为…”命令或如图10 9所示的快捷菜单中的“保存…”命令,可保存工程所选定的文件,执行上述菜单中的“…另存为”命令,则用指定文件名保存在工程中。 习题十 一、选择题 1.下列操作中不能向工程中添加窗体的命令是 。 (A)执行“工程”菜单中的添加窗体命令 (B)单击工具栏上的“添加窗体” (C)右击窗体,在弹出的菜单中选择“添加窗体”命令 (D)右击工程资源管理器,在弹出的菜单中选择“添加”命令,然后在下一级菜单中选择“添加窗体”命令 2.当一个工程含有多个窗体时,其中的启动窗体是 。 (A)启动Visual Basic时建立的窗体 (B)第一个添加的窗体 (C)最后一个添加的窗体 (D)在“工程属性”对话框中指定的窗体 3.设有一个工程文件,包含Form1、Model1、Model2等模块。在Form1的通用部分声明一个变量Public X as Integer,Form1中包含若干事件过程和一个通用过程GetFile。以下关于X作用域的描述中正确的是 。 (A)在Model1中可以使用X (B)X的作用范围不包含Form1中的GetFile (C)X的作用范围是Form1 (D)X的作用范围是整个工程 4.以下关于VB程序模块的描述中正确的是 。 (A)标准模块中的所有过程可以在整个工程文件的范围内被调用 (B)窗体模块Form1中的过程可以调用其他窗体中被声明为Public的通用过程 (C)如果工程文件中包含sub Main过程,则运行该工程文件时,一定先执行Sub Main过程 (D)如果工程文件中不包含sub Main过程,则程序从第一个创建的窗体开始运行 5.关于多重窗体应用程序,以下描述中不正确的是 。 (A)对于多重窗体应用程序,可以有多个当前窗体 (B)多重窗体应用程序的启动窗体可以在设计时设定 (C)多重窗体应用程序中每个窗体作为一个磁盘文件保存,所有窗体、标准模块等作为一个工程文件保存 (D)多重窗体应用程序可以编译生成一个EXE文件 二、填空题 1.若要加载一个新窗体,可以使用 load 语句实现;若要卸载一个窗体,可以使用 unload语句实现。 2.若要显示—个窗体,使用 show 方法;若要隐藏一个窗体,使用 hide 方法;清除一个窗体上的内容,使用 cls 方法。 3.能够在整个工程文件范围内使用的全局变量应该在 标准 模块中定义。 4.工程文件的扩展名是 .vbp ;标准模块文件的扩展名是 .bas ;窗体模块文件的扩展名是 .frm 。若干工程构成工程组文件,其扩展名为 .VBG 。 5.Visual Basic应用程序主要由 窗体 、 标准模块 和 类模块 等三种模块组成。 6.启动窗体在 工程属性 对话框中指定,为了打开该对话框,应执行 工程 菜单中的 命令。 7.全局变量必须在 标准 模块中定义,所使用的语句为 public 。 8.DoEvents语句的作用是 转让控制权,以便让操作系统处理其它的事件。 三、程序设计题 设计一个包含Form1和Form2两个窗体的多窗体应用程序。Form1为启动窗体。单击Form1,隐藏Form1,显示Form2;单击Form2时,隐藏Form2,显示Form1。双击任何一个窗体时,结束程序的运行。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服