ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:288.55KB ,
资源ID:9948210      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9948210.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VB多文档窗体.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VB多文档窗体.docx

1、VB多文档窗体第8章 第8章 多窗体和多文档界面在前面已经学习的内容中,介绍了一些简单的vb程序编写,这些程序的设计、运行都是在一个窗体内完成的,这样的程序称为单窗体程序。而在实际的工作、生活中,具有实用价值的一些程序一般都比较复杂,单窗体已经不能满足编程需要,这时就必须通过多窗体(MultiForm)来实现。多文档界面(multiple document interface,MDI),与多窗体类似,其程序中由多个窗体组成,在这多个窗体中有一个父窗体(应用程序)和若干个子窗体(文档界面),子窗体间的信息可以在父窗体内同时浏览并交互使用。8.1 多窗体设计多窗体程序必须具有两个以上的窗体,并且指

2、定启动窗体(启动对象)。每个窗体都有自己独特的功能,并且必须编写能控制其他窗体和本窗体状态(加载、卸载、显示、隐藏)的事件,这些事件使得各个窗体不再孤立,组成了一个完整、有联系的多窗体程序。8.1.1 与多窗体设计相关的语句和方法单窗体程序只有一个窗体,不存在调用其他窗体的情况。但是多窗体程序中需要在各个窗体间频繁的进行调用、切换,这时可以使用vb提供的一些语句和方法来加载、卸载、显示、隐藏窗体。1. Load语句格式: Load 窗体名称Load语句是把一个窗体装入(加载)内存。之所以要用到load语句,是因为多窗体程序在开始运行时,并不是所有的窗体都被加载的,而是只加载和显示启动窗体,其他

3、的窗体要加载入内存,就必须执行load语句。执行Load语句后,可以引用窗体中的控件以及各种属性,但此时窗体并不会在屏幕上显示出来。“窗体名称”是窗体的Name属性。2. Unload语句格式:Unload 窗体名称Unload语句与Load语句功能相反,其作用是清除(卸载)内存中指定的窗体。一般在某个窗体暂时不会被使用时,用Unload清除窗体在内存中占用的空间,可以提高程序的运行速度。3. Show方法格式: 窗体名称. Show模式Show方法用来显示一个窗体。如果省略“窗体名称”,则显示当前窗体。参数“模式“代表窗体的状态,有两种值:0和1(注意不是False和True)。当“模式”值

4、为1(或常量vbModal)时,表示窗体是“模式型”。在该模式下,鼠标无法移动到其他窗口进行操作,除非关闭该窗口。当“模式”值为0(或常量vbModaless)时,表示窗体是“非模式型“,在该模式下,鼠标不用关闭该窗口也可以对其他窗口进行操作。Show方法兼有装入和显示窗体两种功能。即执行Show时,先把窗体装入内存,然后将窗体显示出来。4. Hide方法格式: 窗体名称. HideHide方法用来隐藏一个窗体。如果省略“窗体名称”,则隐藏当前窗体。注意经过Hide的窗体,依然驻留在内存中,这与使用Unload语句的结果是不同的。5.关键字MeMe代表当前窗体。如果当前窗体为Form1,则下列

5、语句:Form1.show 和 Me.show是等价的。8.1.2 添加多个窗体添加窗体有两种方法:1.选择“工程”菜单下的“添加窗体”命令。2.单击工具栏上的“添加窗体”按钮。用以上两种方法,都会出现添加窗体对话框,该对话框有两个选项卡“新建”和“现存”。点击“新建”选项卡中的“窗体”图标,将会添加一个新窗体;点击“现存”选项卡,可以选择一个属于其他工程的窗体添加到当前工程中。使用“现存”来添加多窗体必须注意以下两个问题:(1)添加的窗体的Name属性不能与该工程中的其他窗体相同,否则无法添加;(2)对该窗体所做的改变将会影响到窗体所在的多个工程,这是因为添加的现存窗体在各个工程中是共享的。

6、8.1.3 多窗体程序的建立【例8.1】设计一个简单的商品销售程序,计算商品总价。本例有三个窗体。第一个窗体“mainfrm.frm”,用来输入密码验证身份;第二个窗体“inputfrm.frm”,用来输入商品的销售种类和数量;第三个窗体“outputfrm.frm”,用来计算并显示销售商品的总价。下面逐步介绍该程序的设计过程:1.建立窗体(1)创建“mainfrm.frm”窗体启动vb6.0,建立一个新的窗体mainfrm,其具体属性设置如表8.1.1所示:表8.1.1 mainfrm窗体的属性设置属性NameCaptionHeightWidth值Mainfrm商品零售系统57007900窗

7、体的属性设置完毕之后,接着在窗体上添加各种控件。在这个窗体上,需要添加的控件有两个lable控件、一个文本框、两个按钮,它们的属性设置见表8.1.2,最终的设置效果如图8.1.1所示。表8.1.2 minafrm窗体各控件属性设置控件NameCaptionTextPasswordcharLabel1Label1商品零售系统Label2Label2请输入密码Text1Text1空*Command1Command1确定Command2Command2关闭图8.1.1 mainfrm窗体(2)添加“inputform”窗体该窗体是用来输入商品的零售种类以及数量。其具体的属性设置如表8.1.3所示表8

8、.1.3 inputfrm窗体属性设置属性NameCaptionHeightWidth值Inputfrm价格输入37655220在该窗体上,有如下的控件,它们的属性设置见表8.1.4,窗体的效果如图8.1.2所示:表8.1.4 inputfrm窗体各控件属性设置控件NameCaptionTextLockedListLabel1Label1价格输入Label2Label2选择商品类别Label3Label3商品单价(元/斤)ComboboxCombo1苹果、梨子Text1Text1空TrueText2Text2空Flase图8.1.2 inputform窗体由于商品的单价是系统预先定义好的,只需

9、要在商品类别的下拉框中选择商品类别,则text1中就会显示出相应商品的单价,此数据不能被改动,所以控件text1的locked属性值设置为True。本例中只提供计算两种商品的价格,分别是“苹果”和“梨子”,可以在程序设计时在combobox控件中的list属性中添加,也可以在程序运行时用addItem来添加,本例中使用的是前者添加。(3)添加“outputfrm”窗体该窗体用来计算inputfrm窗体中输入的数据,并显示出来。窗体的属性设置见表8.1.5表8.1.5 outputfrm窗体的属性设置属性NameCaptionHeightWidth值Outputfrm总价计算37655220窗体

10、上值需要有两种控件:标签和按钮,它们的属性设置见表8.1.6,窗体的效果如图8.1.3所示:表8.1.6 outputfrm窗体各控件的属性设置控件NameCaptionLabel1Label1默认Label2Label2默认Command1Command1继续Command2Command2返回首页图8.1.3 outputfrm窗体这样,本例中的三个窗体就全部添加完毕,图8.1.4显示的是该多窗体程序的工程资源管理器窗口:图8.1.4 工程资源管理器窗口2. 编写程序代码多窗体的编程与单窗体是相同的。要编写某个窗体的代码,可先双击工程资源管理器窗口中相应的窗体文件,然后点击代码窗口按钮,就

11、可以进行代码编写了。(1)mainfrm窗体代码Private Sub Command1_Click() If Text1 = 1234 Then inputfrm.Show Unload Me Else i = MsgBox(密码错误,要重新输入吗?, vbRetryCancel, 密码错误) If i = vbRetry Then Text1 = Text1.SetFocus Else End End If End IfEnd SubPrivate Sub Command2_Click() EndEnd SubPrivate Sub Form_Load() Text1 = End Sub(

12、2)inputfrm窗体代码Private Sub Combo1_Click() Select Case Combo1.ListIndex Case 0 Text1 = 1.8 Case 1 Text1 = 2.5 Case Else Text1 = End SelectEnd SubPrivate Sub Command1_Click() Me.Hide outputfrm.ShowEnd SubPrivate Sub Command2_Click() Me.Hide mainfrm.ShowEnd Sub(3)outputfrm窗体代码Private Sub Command1_Click(

13、) Unload Me inputfrm.ShowEnd SubPrivate Sub Command2_Click() Unload Me mainfrm.ShowEnd SubPrivate Sub Form_Load() Label1.Caption = 您购买的商品是: & inputfrm.Combo1.Text 调用inputfrm窗体中combo1控件的值 Label2.Caption = 总价为: & Str(Val(inputfrm.Text1) * Val(inputfrm.Text2) & 元 调用inpufrm窗体中text文本框中的值 Unload inputfrmE

14、nd Sub请注意outputfrm窗体中调用inputfrm窗体数据的语句的书写。在多窗体程序中,跨窗体调用参数值是经常使用到的操作,要调用form1窗体中的某控件的值的书写格式是:窗体名称.控件名称.属性具体应用请参照outputfrm窗体中的语句。8.1.4 多窗体程序的执行与保存1.指定启动窗体多窗体程序由多个窗体组成,在程序开始运行时只能运行一个窗体,这个窗体就是启动窗体。启动窗体可以通过设置来指定,如果不设置则系统把设计时的第一个窗体作为启动窗体。如要指定启动窗体,可以通过“工程”菜单的“工程属性”对话框来设置。在“工程属性”对话框中的“通用”选项卡下,在启动对象的下拉列表框中选择

15、启动窗体的名称即可。如图8.1.5所示图8.1.5 “工程属性”对话框中设置启动窗体2.多窗体程序的保存方法与单窗体程序的保存相同,点击“文件“菜单的“保存窗体”命令,每个窗体都将进行保存操作,并且每个窗体都应以不同的窗体名进行保存。8.2 Visual Basic 工程结构VB不同于传统的程序设计语言,没有清晰的程序执行顺序,但从总体上来说,每个VB程序都是由若干个模块(Module)组成的,所以,分析VB的工程结构可从VB中的各类模块着手。在Vb中主要有三种模块,即窗体模块、标准模块和类模块。下面主要介绍标准模块和窗体模块。8.2.1 标准模块标准模块也称全局模块,由全局变量声明、模块层声

16、明和通用过程等几部分构成。其中全局变量声明放在标准模块的首部,并且在程序启动时执行。模块层声明包括在标准模块中使用的变量和常量。当需要声明的全局变量较多时,可以把全局声明放在一个单独的标准模块中,这样的模块只含有全局声明而不含过程,它在所有的基本指令开始之前处理。在标准模块中,全局变量用Public声明,模块层变量用Dim或Private声明。在一些简单的程序中,标准模块并不是必须的,如单窗体程序中就不一定要使用标准模块。标准模块的添加可以通过“工程”菜单中的“添加模块”命令或者工具栏上的“添加模块”按钮来建立或打开。方法与添加窗体类似。一个工程文件可以包含多个标准模块,但是各个模块中的过程不

17、能重名。VB通常从启动窗体指令开始执行,除非窗体在执行时需要调用标准模块中的Sub或Function,否则标准模块将不被调用。在标准模块中,包括一个特殊的过程,即Sub Main,将在8.2.3节介绍。8.2.2 窗体模块窗体模块包括三个部分:声明、通用过程、事件过程。声明部分放在窗体的最前面,用Dim语句声明变量,这个变量的作用域是整个窗体模块。在声明部分执行完毕之后,VB会首先查找是否存在Sub Form_load过程,如果存在则首先执行该过程,如不存在则等待该窗体中存在的其他事件过程被激活并执行。通用过程可以被本模块或窗体其它的事件过程调用。在窗体模块中,可以调用标准模块中的过程,也可以

18、调用其他窗体模块中的过程,被调用的过程必须用Public定义为公用过程。标准模块中的过程可以直接调用(当过程名唯一时),而如果要调用其他窗体模块中的过程,则必须加上过程所在的窗体的名字,其格式为:窗体名.过程名参数列表8.2.3 Sub Main过程Sub Main过程存在于标准模块中的一个特殊的过程,它主要应用在多窗体的工程中。Sub Main过程的作用主要是在多窗体运行之前对一些条件进行初始化,并在“工程属性”对话框中将“启动对象”设置为“Sub Main” (如图8.2.1) ,这样,多窗体程序启动时将首先执行Sub Main过程完成初始化条件,然后运行多窗体程序。图8.2.1 设置Su

19、b Main为启动对象例如,对例题8.1商品零售系统进行修改,添加Sub Main过程,使得多窗体程序从第二个窗体(outputfrm.frm)开始显示。方法如下:1.创建标准模块选择“工程”菜单下的“添加模块”命令,在工程组中添加标准模块,如图8.2.2所示图8.2.2 添加标准模块2.编写Sub Main过程 双击工程资源管理窗口中的模块,打开代码窗口,写入如下代码:Sub main() inputfrm.ShowEnd Sub然后在“工程属性”中将“启动对象”设置为“Sub Main”,这样,在多窗体程序启动的时候第一个显示的是inputfrm.frm,而不是mainfrm.frm了。8

20、.3 闲置循环与DoEvents语句 Visual Basic语言具有事件驱动的特点,即某事件发生时才执行相应的程序。如果程序在运行中,没有任何事件发生,则应用程序处于“闲置”(Idle)状态。另一方面,当Visaul Basic正在执行某一过程(即“忙碌”状态)时,将停止对其他事件的处理(如不再接受鼠标、键盘事件),直至这一过程处理完毕。 为了改变这种执行顺序,VB提供了闲置循环(Idle Loop)和DoEvents语句。所谓闲置循环,就是当应用程序处于闲置状态时,用一个循环来执行其他操作。当执行闲置循环时将占用全部CPU时间,不允许执行其他事件过程,使系统处于无限循环中,没有任何反应。为

21、此,VB提供了一个DoEvents语句,使得当执行闲置循环时,可以通过该语句把控制权交给周围环境使用,然后回到原程序继续执行。DoEvents既可以作为语句,也可以作为函数使用,一般格式为:窗体号DoEvents()当作为函数使用时,DoEvents返回当前装入VB应用程序工作区的窗体号,也可将该返回值赋予已定义的变量,如IDoEvents()下面给出一个简单的例题帮助理解闲置循环和DoEvents概念。【例8.3.1】在窗体上创建一命令按钮,编写如下事件过程:Private Sub Command1_Click() For i = 1 To 20000 x = DoEvents For j

22、= 1 To 1000 Next j Cls Print i Next iEnd Sub运行上面的程序,单击命令按钮,将在窗体的左上角显示I的值。当加入了“x=DoEvents”语句后,则在程序运行中,可以执行其他的操作(比如移动窗体位置、改变窗体大小);而如果没有该语句,则除非I的值显示至”20000”为止,否则不能进行其他的操作。8.4 多文档界面多文档界面(Multiple Document Interface,简称MDI),是windows应用程序的典型结构,。它由“父窗口”和“子窗口”(或文档窗口)组成,一个父窗口内可以包括若干个子窗口,各个子窗口都具有相同的功能,类似Microso

23、ft Word的程序结构。要注意的是,多文档界面与多窗体是不同的概念。多窗体程序中的各个窗体是彼此独立的,MDI虽然也可以含有多个窗体,但它有一个父窗体,其他窗体(子窗体)都在父窗体内。8.4.1 MDI窗体1.MDI窗体的建立两种方法可以建立MDI窗体,第一种方法是选择“工程”菜单中的“添加MDI窗体”命令,第二种方法是点击工具栏的“添加MDI窗体”按钮。建立后将会在工程资源管理器窗口出现一个默认名为MDIForm1的MDI窗体图标。2.MDI窗体的保存与保存单窗体一样,选择“文件”菜单下的“保存窗体”命令进行保存。8.4.2 MDI子窗体1.MDI子窗体的建立首先,用添加窗体的方法添加一个

24、新窗体form1;其次,将该窗体的MDIChild属性设置为“True”这样,就建立了一个“form1”的子窗体,在工程资源管理器窗口中可以看到该窗体的图标。MDI窗体与MDI子窗体在外观上看与普通的窗体相同,它们的区别可以在工程资源管理器窗口中的图标看出来,如图8.4.1所示图8.4.1 MDI子窗体、标准窗体、MDI窗体图标2.MDI子窗体的特性(1)所有的子窗体都在MDI窗体的内部显示,可以移动,但是不能超越MDI窗体的工作区。(2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在任务栏中。当最小化MDI窗体时,所有的MDI子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。(

25、3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。(4)通过设定Autoshowchildren属性,可以使子窗体在装入时自动显示(True)或自动隐藏(False)(5)如果活动子窗体有菜单,则菜单将显示在MDI窗体的菜单栏中,而不是显示在子窗体中。8.4.3 引例【例8.4.1】建立一个简单的多文档界面,实现文本书写器的功能。这里要建立的文本书写器类似于Windows中的Notepad应用程序,但文本书写器程序使用的是MDI,而Notepad使用的是SDI(单文档界面)。在该程序中,菜单栏上有一个“文件”菜单,菜单中有“新建”命令,用来创建新的子窗体。下面

26、逐步来实现该功能1.运行Visual Basic 6.0,新建一个工程,点击“工程”菜单中的“添加MDI窗体”命令,添加一个MDI窗体,将其“name”属性设置为MDIFrm。这时工程中有两个窗体Form1和MDIFrm。2.将Form1窗体的“MDIChild”属性设置为“True”,Name属性设置为“MDIChildFrm”。3.在MDIChildFrm窗体上创建一个文本框(text1),任意大小。具体设置见表8.4.1表8.4.1 MDI窗体、MDIChild窗体和文本框的属性设置对象属性设置值MDIFrmCaption文档书写器MDIChildFrmCaption无标题文档1Text

27、1MultilineTrueText(空)设置好的效果图如图8.4.2所示图8.4.2 MDIChildFrm窗体4.调用“工具”菜单下的“菜单编辑器”,在MDI窗体MDIFrm上建立“文件”菜单,“文件”菜单下有“新建”命令。属性设置见表8.4.2,菜单编辑器的使用如图8.4.3所示,设置完毕后MDIFrm窗体的效果如图8.4.4所示表8.4.2 文件菜单属性设置标题名称类别文件(&F)MnuFile主菜单新建(&N)MnuFileNew子菜单图8.4.3 菜单编辑器图8.4.4 MDIFrm窗体效果图5.将下列代码加入到MDIFrm的通用过程中 Dim no As Integer再将下列代

28、码加入到Private Sub MnuFileNew_click()事件过程中Private Sub MnuFileNew_Click() 建立MDIChildFrm的一个新实例,名为NewDoc Dim NewDoc As New MDIChildFrm If no = 0 Then no = 1 no = no + 1 NewDoc.Caption = 无标题文档 & Trim(Str(no) & 显示NewDoc窗体 NewDoc.ShowEnd Sub这段代码的作用是当鼠标单击“文件”菜单的“新建”命令时,将通过Dim语句建立一个MDIChildFrm的一个新实例,名为NewDoc,并

29、且把它显示出来。下面简单介绍Dim语句在MDI中的应用。在MDI程序中,Dim语句可以用来增加子窗体,其具体格式为:Dim 对象变量(对象变量1 to对象变量2) As New 对象名称或对象类型在本例中,MDIChildFrm是一个窗体类,增加的NewDoc则是属于此类的一个子窗体,它具有一切MDIChildFrm窗体的控件以及属性。创建的NewDoc开始并不会被加载、显示,只有在执行了Load NewDoc 或NewDoc.show指令后才会被加载、显示。6.将下列代码加入到MDIChildFrm的Private Sub Form_Resize()过程中Private Sub Form_R

30、esize()Text1.Top = 0Text1.Left = 0 Text1.Height = ScaleHeightText1.Width = ScaleWidthEnd Sub这段代码的作用是使程序运行时,MDIChildFrm上的Text1控件充满子窗体的内部区域。这样,整个的程序就建立完毕,运行效果如图8.4.5所示图8.4.5 MDI文档书写器效果图8.4.4 Arrange方法Arrange方法用来以不同的方式排列MDI窗体内的多个子窗体。其格式为:MDI窗体.Arrange 方式其中“方式”可以取四个值:0、1、2、3 0 vbCascade,层叠式排列所有非最小化MDI子窗体 1 vbTileHorizontal,水平平铺式排列所有非最小化MDI子

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1