第8章 多窗体和多文档界面Word格式文档下载.docx
- 文档编号:19704942
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:24
- 大小:288.58KB
第8章 多窗体和多文档界面Word格式文档下载.docx
《第8章 多窗体和多文档界面Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第8章 多窗体和多文档界面Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
4.Hide方法
[窗体名称.]Hide
Hide方法用来隐藏一个窗体。
如果省略“窗体名称”,则隐藏当前窗体。
注意经过Hide的窗体,依然驻留在内存中,这与使用Unload语句的结果是不同的。
5.关键字Me
Me代表当前窗体。
如果当前窗体为Form1,则下列语句:
Form1.show和Me.show
是等价的。
8.1.2添加多个窗体
添加窗体有两种方法:
1.选择“工程”菜单下的“添加窗体”命令。
2.单击工具栏上的“添加窗体”按钮。
用以上两种方法,都会出现添加窗体对话框,该对话框有两个选项卡“新建”和“现存”。
点击“新建”选项卡中的“窗体”图标,将会添加一个新窗体;
点击“现存”选项卡,可以选择一个属于其他工程的窗体添加到当前工程中。
使用“现存”来添加多窗体必须注意以下两个问题:
(1)添加的窗体的Name属性不能与该工程中的其他窗体相同,否则无法添加;
(2)对该窗体所做的改变将会影响到窗体所在的多个工程,这是因为添加的现存窗体在各个工程中是共享的。
8.1.3多窗体程序的建立
【例8.1】设计一个简单的商品销售程序,计算商品总价。
本例有三个窗体。
第一个窗体“mainfrm.frm”,用来输入密码验证身份;
第二个窗体“inputfrm.frm”,用来输入商品的销售种类和数量;
第三个窗体“outputfrm.frm”,用来计算并显示销售商品的总价。
下面逐步介绍该程序的设计过程:
1.建立窗体
(1)创建“mainfrm.frm”窗体
启动vb6.0,建立一个新的窗体mainfrm,其具体属性设置如表8.1.1所示:
表8.1.1mainfrm窗体的属性设置
属性
Name
Caption
Height
Width
值
Mainfrm
商品零售系统
5700
7900
窗体的属性设置完毕之后,接着在窗体上添加各种控件。
在这个窗体上,需要添加的控件有两个lable控件、一个文本框、两个按钮,它们的属性设置见表8.1.2,最终的设置效果如图8.1.1所示。
表8.1.2minafrm窗体各控件属性设置
控件
Text
Passwordchar
Label1
Label2
请输入密码
Text1
空
*
Command1
确定
Command2
关闭
图8.1.1mainfrm窗体
(2)添加“inputform”窗体
该窗体是用来输入商品的零售种类以及数量。
其具体的属性设置如表8.1.3所示
表8.1.3inputfrm窗体属性设置
Inputfrm
价格输入
3765
5220
在该窗体上,有如下的控件,它们的属性设置见表8.1.4,窗体的效果如图8.1.2所示:
表8.1.4inputfrm窗体各控件属性设置
Locked
List
选择商品类别
Label3
商品单价(元/斤)
Combobox
Combo1
苹果、梨子
True
Text2
Flase
图8.1.2inputform窗体
由于商品的单价是系统预先定义好的,只需要在商品类别的下拉框中选择商品类别,则text1中就会显示出相应商品的单价,此数据不能被改动,所以控件text1的locked属性值设置为True。
本例中只提供计算两种商品的价格,分别是“苹果”和“梨子”,可以在程序设计时在combobox控件中的list属性中添加,也可以在程序运行时用addItem来添加,本例中使用的是前者添加。
(3)添加“outputfrm”窗体
该窗体用来计算inputfrm窗体中输入的数据,并显示出来。
窗体的属性设置见表8.1.5
表8.1.5outputfrm窗体的属性设置
Outputfrm
总价计算
窗体上值需要有两种控件:
标签和按钮,它们的属性设置见表8.1.6,窗体的效果如图8.1.3所示:
表8.1.6outputfrm窗体各控件的属性设置
默认
继续
返回首页
图8.1.3outputfrm窗体
这样,本例中的三个窗体就全部添加完毕,图8.1.4显示的是该多窗体程序的工程资源管理器窗口:
图8.1.4工程资源管理器窗口
2.编写程序代码
多窗体的编程与单窗体是相同的。
要编写某个窗体的代码,可先双击工程资源管理器窗口中相应的窗体文件,然后点击代码窗口按钮,就可以进行代码编写了。
(1)mainfrm窗体代码
PrivateSubCommand1_Click()
IfText1="
1234"
Then
inputfrm.Show
UnloadMe
Else
i=MsgBox("
密码错误,要重新输入吗?
"
vbRetryCancel,"
密码错误"
)
Ifi=vbRetryThen
Text1="
Text1.SetFocus
End
EndIf
EndSub
PrivateSubCommand2_Click()
PrivateSubForm_Load()
(2)inputfrm窗体代码
PrivateSubCombo1_Click()
SelectCaseCombo1.ListIndex
Case0
1.8"
Case1
2.5"
CaseElse
EndSelect
Me.Hide
outputfrm.Show
mainfrm.Show
(3)outputfrm窗体代码
Label1.Caption="
您购买的商品是:
&
inputfrm.Combo1.Text‘调用inputfrm窗体中combo1控件的值
Label2.Caption="
总价为:
Str(Val(inputfrm.Text1)*Val(inputfrm.Text2))&
"
元"
‘调用inpufrm窗体中text文本框中的值
Unloadinputfrm
请注意outputfrm窗体中调用inputfrm窗体数据的语句的书写。
在多窗体程序中,跨窗体调用参数值是经常使用到的操作,要调用form1窗体中的某控件的值的书写格式是:
窗体名称.控件名称.属性
具体应用请参照outputfrm窗体中的语句。
8.1.4多窗体程序的执行与保存
1.指定启动窗体
多窗体程序由多个窗体组成,在程序开始运行时只能运行一个窗体,这个窗体就是启动窗体。
启动窗体可以通过设置来指定,如果不设置则系统把设计时的第一个窗体作为启动窗体。
如要指定启动窗体,可以通过“工程”菜单的“工程属性”对话框来设置。
在“工程属性”对话框中的“通用”选项卡下,在启动对象的下拉列表框中选择启动窗体的名称即可。
如图8.1.5所示
图8.1.5“工程属性”对话框中设置启动窗体
2.多窗体程序的保存
方法与单窗体程序的保存相同,点击“文件“菜单的“保存窗体”命令,每个窗体都将进行保存操作,并且每个窗体都应以不同的窗体名进行保存。
8.2VisualBasic工程结构
VB不同于传统的程序设计语言,没有清晰的程序执行顺序,但从总体上来说,每个VB程序都是由若干个模块(Module)组成的,所以,分析VB的工程结构可从VB中的各类模块着手。
在Vb中主要有三种模块,即窗体模块、标准模块和类模块。
下面主要介绍标准模块和窗体模块。
8.2.1标准模块
标准模块也称全局模块,由全局变量声明、模块层声明和通用过程等几部分构成。
其中全局变量声明放在标准模块的首部,并且在程序启动时执行。
模块层声明包括在标准模块中使用的变量和常量。
当需要声明的全局变量较多时,可以把全局声明放在一个单独的标准模块中,这样的模块只含有全局声明而不含过程,它在所有的基本指令开始之前处理。
在标准模块中,全局变量用Public声明,模块层变量用Dim或Private声明。
在一些简单的程序中,标准模块并不是必须的,如单窗体程序中就不一定要使用标准模块。
标准模块的添加可以通过“工程”菜单中的“添加模块”命令或者工具栏上的“添加模块”按钮来建立或打开。
方法与添加窗体类似。
一个工程文件可以包含多个标准模块,但是各个模块中的过程不能重名。
VB通常从启动窗体指令开始执行,除非窗体在执行时需要调用标准模块中的Sub或Function,否则标准模块将不被调用。
在标准模块中,包括一个特殊的过程,即SubMain,将在8.2.3节介绍。
8.2.2窗体模块
窗体模块包括三个部分:
声明、通用过程、事件过程。
声明部分放在窗体的最前面,用Dim语句声明变量,这个变量的作用域是整个窗体模块。
在声明部分执行完毕之后,VB会首先查找是否存在SubForm_load过程,如果存在则首先执行该过程,如不存在则等待该窗体中存在的其他事件过程被激活并执行。
通用过程可以被本模块或窗体其它的事件过程调用。
在窗体模块中,可以调用标准模块中的过程,也可以调用其他窗体模块中的过程,被调用的过程必须用Public定义为公用过程。
标准模块中的过程可以直接调用(当过程名唯一时),而如果要调用其他窗体模块中的过程,则必须加上过程所在的窗体的名字,其格式为:
窗体名.过程名[参数列表]
8.2.3SubMain过程
SubMain过程存在于标准模块中的一个特殊的过程,它主要应用在多窗体的工程中。
SubMain过程的作用主要是在多窗体运行之前对一些条件进行初始化,并在“工程属性”对话框中将“启动对象”设置为“SubMain”(如图8.2.1),这样,多窗体程序启动时将首先执行SubMain过程完成初始化条件,然后运行多窗体程序。
图8.2.1设置SubMain为启动对象
例如,对例题8.1商品零售系统进行修改,添加SubMain过程,使得多窗体程序从第二个窗体(outputfrm.frm)开始显示。
方法如下:
1.创建标准模块
选择“工程”菜单下的“添加模块”命令,在工程组中添加标准模块,如图8.2.2所示
图8.2.2添加标准模块
2.编写SubMain过程
双击工程资源管理窗口中的模块,打开代码窗口,写入如下代码:
Submain()
然后在“工程属性”中将“启动对象”设置为“SubMain”,这样,在多窗体程序启动的时候第一个显示的是inputfrm.frm,而不是mainfrm.frm了。
8.3闲置循环与DoEvents语句
VisualBasic语言具有事件驱动的特点,即某事件发生时才执行相应的程序。
如果程序在运行中,没有任何事件发生,则应用程序处于“闲置”(Idle)状态。
另一方面,当VisaulBasic正在执行某一过程(即“忙碌”状态)时,将停止对其他事件的处理(如不再接受鼠标、键盘事件),直至这一过程处理完毕。
为了改变这种执行顺序,VB提供了闲置循环(IdleLoop)和DoEvents语句。
所谓闲置循环,就是当应用程序处于闲置状态时,用一个循环来执行其他操作。
当执行闲置循环时将占用全部CPU时间,不允许执行其他事件过程,使系统处于无限循环中,没有任何反应。
为此,VB提供了一个DoEvents语句,使得当执行闲置循环时,可以通过该语句把控制权交给周围环境使用,然后回到原程序继续执行。
DoEvents既可以作为语句,也可以作为函数使用,一般格式为:
[窗体号=]DoEvents[()]
当作为函数使用时,DoEvents返回当前装入VB应用程序工作区的窗体号,也可将该返回值赋予已定义的变量,如I=DoEvents()
下面给出一个简单的例题帮助理解闲置循环和DoEvents概念。
【例8.3.1】在窗体上创建一命令按钮,编写如下事件过程:
Fori=1To20000
x=DoEvents
Forj=1To1000
Nextj
Cls
Printi
Nexti
运行上面的程序,单击命令按钮,将在窗体的左上角显示I的值。
当加入了“x=DoEvents”语句后,则在程序运行中,可以执行其他的操作(比如移动窗体位置、改变窗体大小);
而如果没有该语句,则除非I的值显示至”20000”为止,否则不能进行其他的操作。
8.4多文档界面
多文档界面(MultipleDocumentInterface,简称MDI),是windows应用程序的典型结构,。
它由“父窗口”和“子窗口”(或文档窗口)组成,一个父窗口内可以包括若干个子窗口,各个子窗口都具有相同的功能,类似MicrosoftWord的程序结构。
要注意的是,多文档界面与多窗体是不同的概念。
多窗体程序中的各个窗体是彼此独立的,MDI虽然也可以含有多个窗体,但它有一个父窗体,其他窗体(子窗体)都在父窗体内。
8.4.1MDI窗体
1.MDI窗体的建立
两种方法可以建立MDI窗体,第一种方法是选择“工程”菜单中的“添加MDI窗体”命令,第二种方法是点击工具栏的“添加MDI窗体”按钮。
建立后将会在工程资源管理器窗口出现一个默认名为MDIForm1的MDI窗体图标。
2.MDI窗体的保存
与保存单窗体一样,选择“文件”菜单下的“保存窗体”命令进行保存。
8.4.2MDI子窗体
1.MDI子窗体的建立
首先,用添加窗体的方法添加一个新窗体form1;
其次,将该窗体的MDIChild属性设置为“True”
这样,就建立了一个“form1”的子窗体,在工程资源管理器窗口中可以看到该窗体的图标。
MDI窗体与MDI子窗体在外观上看与普通的窗体相同,它们的区别可以在工程资源管理器窗口中的图标看出来,如图8.4.1所示
图8.4.1MDI子窗体、标准窗体、MDI窗体图标
2.MDI子窗体的特性
(1)所有的子窗体都在MDI窗体的内部显示,可以移动,但是不能超越MDI窗体的工作区。
(2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在任务栏中。
当最小化MDI窗体时,所有的MDI子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。
(3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。
(4)通过设定Autoshowchildren属性,可以使子窗体在装入时自动显示(True)或自动隐藏(False)
(5)如果活动子窗体有菜单,则菜单将显示在MDI窗体的菜单栏中,而不是显示在子窗体中。
8.4.3引例
【例8.4.1】建立一个简单的多文档界面,实现文本书写器的功能。
这里要建立的文本书写器类似于Windows中的Notepad应用程序,但文本书写器程序使用的是MDI,而Notepad使用的是SDI(单文档界面)。
在该程序中,菜单栏上有一个“文件”菜单,菜单中有“新建”命令,用来创建新的子窗体。
下面逐步来实现该功能
1.运行VisualBasic6.0,新建一个工程,点击“工程”菜单中的“添加MDI窗体”命令,添加一个MDI窗体,将其“name”属性设置为MDIFrm。
这时工程中有两个窗体Form1和MDIFrm。
2.将Form1窗体的“MDIChild”属性设置为“True”,Name属性设置为“MDIChildFrm”。
3.在MDIChildFrm窗体上创建一个文本框(text1),任意大小。
具体设置见表8.4.1
表8.4.1MDI窗体、MDIChild窗体和文本框的属性设置
对象
设置值
MDIFrm
文档书写器
MDIChildFrm
[无标题文档1]
Multiline
(空)
设置好的效果图如图8.4.2所示
图8.4.2MDIChildFrm窗体
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.4MDIFrm窗体效果图
5.将下列代码加入到MDIFrm的通用过程中
DimnoAsInteger
再将下列代码加入到PrivateSubMnuFileNew_click()事件过程中
PrivateSubMnuFileNew_Click()
'
建立MDIChildFrm的一个新实例,名为NewDoc
DimNewDocAsNewMDIChildFrm
Ifno=0Thenno=1
no=no+1
NewDoc.Caption="
[无标题文档"
Trim(Str(no))&
]"
显示NewDoc窗体
NewDoc.Show
这段代码的作用是当鼠标单击“文件”菜单的“新建”命令时,将通过Dim语句建立一个MDIChildFrm的一个新实例,名为NewDoc,并且把它显示出来。
下面简单介绍Dim语句在MDI中的应用。
在MDI程序中,Dim语句可以用来增加子窗体,其具体格式为:
Dim对象变量[([对象变量1to]对象变量2)]As[New]对象名称或对象类型
在本例中,MDIChildFrm是一个窗体类,增加的NewDoc则是属于此类的一个子窗体,它具有一切MDIChildFrm窗体的控件以及属性。
创建的NewDoc开始并不会被加载、显示,只有在执行了LoadNewDoc或NewDoc.show指令后才会被加载、显示。
6.将下列代码加入到MDIChildFrm的PrivateSubForm_Resize()过程中
PrivateSubForm_Resize()
Text1.Top=0
Text1.Left=0
Text1.Height=ScaleHeight
Text1.Width=ScaleWidth
这段代码的作用是使程序运行时,MDIChildFrm上的Text1控件充满子窗体的内部区域。
这样,整个的程序就建立完毕,运行效果如图8.4.5所示
图8.4.5MDI文档书写器效果图
8.4.4Arrange方法
Arrange方法用来以不同的方式排列MDI窗体内的多个子窗体。
其格式为:
MDI窗体.Arrange方式
其中“方式”可以取四个值:
0、1、2、3
0vbCascade,层叠式排列所有非最小化MDI子窗体
1vbTileHorizontal,水平平铺式排列所有非最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第8章 多窗体和多文档界面 窗体 文档 界面