第8章多窗体和多文档界面_第1页
第8章多窗体和多文档界面_第2页
第8章多窗体和多文档界面_第3页
第8章多窗体和多文档界面_第4页
第8章多窗体和多文档界面_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第8章 多窗体和多文档界面多窗体程序:包含两个或两个以上窗体的应用程序窗体分为:普通窗体和多文档窗体(MDI)MDI:Multiple Document Interface多文档界面可同时打开多个文档,提供多个文档操作的界面,让用户随意在各个文档间来回切换,并进行数据剪贴及连接工作8.1 多窗体设计8.2 Visual Basic 工程结构8.3 闲置循环与DoEvents语句8.4 多文档界面8.1 多窗体设计多窗体程序必须具有两个以上的窗体,并且指定启动窗体(启动对象)。 (1) Load语句把一个窗体装入内存,格式:Load 窗体名称执行Load语句后,可以引用窗体中的控件及各种属性,但

2、此窗体没有显示出来。(2) Unload语句该语句与Load语句功能相反,它删除内存中指定的窗体, 格式:Unload 窗体名称例如:Unload Me 关闭窗体自己,Me代表该语句所在的窗体8.1.1 与多窗体设计相关的语句和方法(3) Show方法用来显示一个窗体 ,兼有加载和显示两种功能格式:窗体名称.Show模式说明:模式:确定窗体的状态。有0和1两个值,默认为0“1”:窗体为“模式型”,用户不能将鼠标移动到其它窗口“0”:窗体为“非模式型”,可以对其它窗口进行操作(4) Hide方法用来将窗体暂时隐藏起来,但并未从内存中删除格式:窗体名称.Hide说明:窗体名称:默认时为当前窗体显示

3、窗体:应先建立窗体,再装入内存(Load语句),最后显示(Show方法)在屏幕上删除窗体:先从屏幕上隐藏(Hide方法),再从内存中删除(Unload方法)8.1.2 添加多个窗体1、添加窗体有两种方法: “工程”添加窗体。单击工具栏上的“添加窗体”按钮。2、添加窗体用以上两种方法,都会出现添加窗体对话框 “新建”选项卡选择欲添加窗体的类型或者在“现存”选项卡中把一个已经建立好的窗体添加到当前工程中3、设置启动对象启动对象:在程序运行过程中,首先执行的对象,默认第一个创建的窗体为启动对象(即启动窗体)“工程”工程属性打开“工程”属性对话框在启动对象下拉列表中选择启动对象(窗体)启动对象可以是窗

4、体,也可以是Main子过程Main子过程必须放在标准模块中,绝对不能放在窗体模块内8.1.3 多窗体程序的建立【例8.1】设计一个简单的商品销售程序,计算商品总价。本例有三个窗体。第一个窗体“mainfrm.frm”,用来输入密码验证身份;第二个窗体“inputfrm.frm”,用来输入商品的销售种类和数量;第三个窗体“outputfrm.frm”,用来计算并显示销售商品的总价。下面逐步介绍该程序的设计过程:1.建立窗体(1)创建“mainfrm.frm”窗体启动vb6.0,建立一个新的窗体mainfrm,其具体属性设置如表8.1.1所示:属性NameCaptionHeightWidth值Ma

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

6、类以及数量。其具体的属性设置如表8.1.3所示图8.1.1 mainfrm窗体属性NameCaptionHeightWidth值Inputfrm价格输入37655220表8.1.3 inputfrm窗体属性设置在该窗体上,有如下的控件,它们的属性设置见表8.1.4,窗体的效果如图8.1.2所示:控件NameCaptionTextLockedListLabel1Label1价格输入Label2Label2选择商品类别Label3Label3商品单价(元/斤)ComboboxCombo1苹果、梨子Text1Text1空TrueText2Text2空Flase表8.1.4 inputfrm窗体各控件

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

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

9、个窗体的代码,可先双击工程资源管理器窗口中相应的窗体文件,然后点击代码窗口按钮,就可以进行代码编写了。(1)mainfrm窗体代码Private Sub Command1_Click() If Text1 = 1234 Then inputfrm.Show Unload Me Else i = MsgBox(密码错误,要重新输入吗?, vRetryCancel, 密码错误) If i = vbRetry Then Text1 = Text1.SetFocus Else End End If End IfEnd SubPrivate Sub Command2_Click() EndEnd Sub

10、Private Sub Form_Load() Text1 = End Sub(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)

11、outputfrm窗体代码Private Sub Command1_Click() 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) & 元

12、 调用inpufrm窗体中text文本框中的值 Unload inputfrmEnd Sub请注意outputfrm窗体中调用inputfrm窗体数据的语句的书写。在多窗体程序中,跨窗体调用参数值是经常使用到的操作,要调用form1窗体中的某控件的值的书写格式是:窗体名称.控件名称.属性具体应用请参照outputfrm窗体中的语句。8.1.4 多窗体程序的保存多窗体程序的保存:方法与单窗体程序的保存相同,“文件”“保存窗体”命令,每个窗体都将进行保存操作,并且每个窗体都应以不同的窗体名进行保存。8.2 Visual Basic 工程结构在Vb中主要有三种模块,即窗体模块、标准模块和类模块。一个

13、VB工程至少包含一个窗体模块,还可以根据需要包含若干个标准模块和类模块下面主要介绍标准模块和窗体模块。8.2.1 标准模块标准模块也称全局模块文件名为:*.bas其中可以包含用户编写的子程序、函数过程和一些变量、常量、用户自定义类型等内容的声明“工程”添加模块,为工程新建或添加已有模块文件通常将常用的子程序、函数过程等写在模块文件中,若以后编程中涉及此类操作,就可以把此模块添加到工程中。VB通常从启动窗体指令开始执行,除非窗体在执行时需要调用标准模块中的Sub或Function,否则标准模块将不被调用。在标准模块中,包括一个特殊的过程,即Sub Main,将在8.2.3节介绍。8.2.2 窗体

14、模块文件名为:*.frm其中可以包含用户编写的事件过程、子程序、函数过程和一些变量、常量、用户自定义类型等内容的声明“工程”添加窗体,为工程添加多个窗体在窗体模块中,可以调用标准模块中的过程,也可以调用其他窗体模块中的过程,被调用的过程必须用Public定义为公用过程。标准模块中的过程可以直接调用(当过程名唯一时)如果要调用其他窗体模块中的过程,则必须加上过程所在的窗体的名字,其格式为: 窗体名.过程名参数列表8.2.3 Sub Main过程Sub Main过程存在于标准模块中的一个特殊的过程,它主要应用在多窗体的工程中。Sub Main过程的作用主要是在多窗体运行之前对一些条件进行初始化,并

15、在“工程属性”对话框中将“启动对象”设置为“Sub 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.fr

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

17、环中,没有任何反应。DoEvents既可以作为语句,也可以作为函数使用,一般格式为:窗体号DoEvents() 当作为函数使用时,DoEvents返回当前装入VB应用程序工作区的窗体号,也可将该返回值赋予已定义的变量,如IDoEvents()【例8.3.1】在窗体上创建一命令按钮,编写如下事件过程:Private Sub Command1_Click() For i = 1 To 20000 x = DoEvents For j = 1 To 1000 Next j Cls Print i Next iEnd Sub运行上面的程序,单击命令按钮,将在窗体的左上角显示I的值。当加入了“x=DoE

18、vents”语句后,则在程序运行中,可以执行其他的操作(比如移动窗体位置、改变窗体大小);而如果没有该语句,则除非I的值显示至”20000”为止,否则不能进行其他的操作。8.4 多文档界面由MDI窗体和至少一个MDI子窗体组成运行后,MDI子窗体显示在MDI窗体(父窗体)中一个父窗体可以包含多个子窗体子窗体最小化后将以图标的形式出现在父窗体中,而不会出现在Windows的任务栏中当最小化父窗体时,所有的子窗体也被最小化,只有父窗体的图标出现在任务栏中8.4.1 MDI窗体1.MDI窗体的建立“工程”添加MDI窗体打开“添加MDI窗体”对话框选择“新建MDI窗体”或“现存的MDI窗体”,再选择“

19、打开”按钮即可MDI窗体是子窗体的容器,故该窗体中一般有菜单栏、工具栏和状态栏。2.MDI窗体的保存与保存单窗体一样,选择“文件”菜单下的“保存窗体”命令进行保存。8.4.2 MDI子窗体可独立创建,通过查看窗体的MDIChild属性或检查工程资源管理器,可以确定窗体是否是一个MDI子窗体 首先,用添加窗体的方法添加一个新窗体form1; 其次,将该窗体的MDIChild属性设置为“True”一个应用程序只能有一个MDI窗体,可以有多个MDI子窗体MDI窗体与MDI子窗体在外观上看与普通的窗体相同,它们的区别可以在工程资源管理器窗口中的图标看出来,如图8.4.1所示图8.4.1 MDI子窗体、

20、标准窗体、MDI窗体图标MDI子窗体的特性(1)所有的子窗体都在MDI窗体的内部显示,可以移动,但是不能超越MDI窗体的工作区。(2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在任务栏中。当最小化MDI窗体时,所有的MDI子窗体也被最小化,只有MDI窗体的图标出现在任务栏中。(3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示在MDI窗体的标题栏上。(4)通过设定Autoshowchildren属性,可以使子窗体在装入时自动显示(True)或自动隐藏(False)(5)如果活动子窗体有菜单,则菜单将显示在MDI窗体的菜单栏中,而不是显示在子窗体中。8.4.3 引例【例8.

21、4.1】建立一个简单的多文档界面,实现文本书写器的功能。这里要建立的文本书写器类似于Windows中的Notepad应用程序,但文本书写器程序使用的是MDI,而Notepad使用的是SDI(单文档界面)。在该程序中,菜单栏上有一个“文件”菜单,菜单中有“新建”命令,用来创建新的子窗体。下面逐步来实现该功能1.运行Visual Basic 6.0,新建一个工程,点击“工程”菜单中的“添加MDI窗体”命令,添加一个MDI窗体,将其“name”属性设置为MDIFrm。这时工程中有两个窗体Form1和MDIFrm。2.将Form1窗体的“MDIChild”属性设置为“True”,Name属性设置为“M

22、DIChildFrm”。3.在MDIChildFrm窗体上创建一个文本框(text1),任意大小。具体设置见表8.4.1对象属性设置值MDIFrmCaption文档书写器MDIChildFrmCaption无标题文档1Text1MultilineTrueText(空)表8.4.1 MDI窗体、MDIChild窗体和文本框的属性设置设置好的效果图如图8.4.2所示图8.4.2 MDIChildFrm窗体4.调用“工具”菜单下的“菜单编辑器”,在MDI窗体MDIFrm上建立“文件”菜单,“文件”菜单下有“新建”命令。属性设置见表8.4.2,菜单编辑器的使用如图8.4.3所示,设置完毕后MDIFrm

23、窗体的效果如图8.4.4所示标题名称类别文件(&F)MnuFile主菜单新建(&N)MnuFileNew子菜单表8.4.2 文件菜单属性设置图8.4.3 菜单编辑器图8.4.4 MDIFrm窗体效果图5.将下列代码加入到MDIFrm的通用过程中 Dim no As Integer再将下列代码加入到Private Sub MnuFileNew_click()事件过程中Private Sub MnuFileNew_Click() 建立MDIChildFrm的一个新实例,名为NewDoc Dim NewDoc As New MDIChildFrm If no = 0 Then no = 1 no =

24、 no + 1 NewDoc.Caption = 无标题文档 & Trim(Str(no) & 显示NewDoc窗体 NewDoc.ShowEnd Sub这段代码的作用是当鼠标单击“文件”菜单的“新建”命令时,将通过Dim语句建立一个MDIChildFrm的一个新实例,名为NewDoc,并且把它显示出来。下面简单介绍Dim语句在MDI中的应用。在MDI程序中,Dim语句可以用来增加子窗体,其具体格式为:Dim 对象变量(对象变量1 to对象变量2) As New 对象名称或对象类型在本例中,MDIChildFrm是一个窗体类,增加的NewDoc则是属于此类的一个子窗体,它具有一切MDIChil

25、dFrm窗体的控件以及属性。创建的NewDoc开始并不会被加载、显示,只有在执行了Load NewDoc 或NewDoc.show指令后才会被加载、显示。6.将下列代码加入到MDIChildFrm的Private Sub Form_Resize()过程中Private Sub Form_Resize()Text1.Top = 0Text1.Left = 0 Text1.Height = ScaleHeightText1.Width = ScaleWidthEnd Sub这段代码的作用是使程序运行时,MDIChildFrm上的Text1控件充满子窗体的内部区域。这样,整个的程序就建立完毕,运行效

26、果如图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子窗体 2 vbTileVertical,垂直平铺式排列所有非最小化MDI子窗体。 3 vbArrangeIcons,对任何已经最小化的子窗体排列图标【例8.4.2】在例题8.4.1的菜单栏上,添加“窗口”菜单,此菜单具有对文档窗口进行

27、“层叠式”、“水平平铺”、“垂直平铺”排列的功能。具体步骤如下:1.使用“菜单编辑器”添加“窗口”菜单,并且添加“层叠”、“水平平铺”、“垂直平铺”命令。它们的属性设置见表8.4.3标题名称类别窗口(&W)MnuWindows主菜单层叠MnuWindowsA1子菜单水平平铺MnuWindowsA2子菜单垂直平铺MnuWindowsA3子菜单表8.4.3 “窗口”菜单的属性设置2.在MDIFrm窗体中添加以下代码:Private Sub MnuWindowsA1_Click() MDIFrm.Arrange 0End SubPrivate Sub MnuWindowsA2_Click() MDI

28、Frm.Arrange 1End SubPrivate Sub MnuWindowsA3_Click() MDIFrm.Arrange 2End Sub这样就可以实现窗口的各种排列效果了。水平平铺的效果如图8.4.6所示。图8.4.6 水平平铺窗口8.4.5 在MDI窗体添加工具栏作为一个完整的文档窗口,就像word窗口一样,MDI窗口也应该具有工具栏和状态栏。制作工具栏有两种方法:一是手工制作,即利用图形框和命令按钮来制作,比较繁琐;另外一种方法是通过组合使用ToolBar、ImageList控件,这种方法简单易学。上述三种控件必须在“工程”菜单中的“部件”对话框中进行添加。具体方法是单击“

29、工程”菜单中的“部件”命令,打开“部件”对话框。在“部件”对话框中选择“Microsoft Windows Common Controls 6.0”,然后点击确定。这样,会在VB的工具箱上显示出新添加的部件,如图8.4.7所示图8.4.7 工具箱上添加的新控件添加部件后,首先要将按钮的图标文件装入ImageList控件内,具体操作如下:1.双击ImageList控件,在MDI窗体上将会出现默认名为“ImageList1”的控件,这时右键单击该控件,选择“属性”命令,调出“属性页”对话框,并选择“图像”选项卡(如图8.4.8所示)。2.点击“插入图片”按钮,插入按钮图标文件。图8.4.8 “Im

30、ageList1”控件属性页设置图 在该属性页上,每插入一张图片,该图片相对应的索引值(Index)会自动加1,关键字(Key)中的内容必须自定义。上图8.4.8中可知,本例中一共加入了9张图片,作为按钮图标。这样,ImageList1中的按钮图标就全部添加完毕。要注意的是,ImageList1控件只是一个存放图片的容器,它存放的图片将在后面使用ToolBar控件添加按钮时提供图标的链接。ImageList控件只能在设计阶段显示,而在程序运行阶段是无法看到的,这种特性类似于时钟Timer控件。接下来就要使用ToolBar控件来添加工具栏的按钮了。具体方法如下:1.在工具箱上双击“ToolBar”控件,MDI窗体的菜单栏下方将会出现一条灰色的工具栏区域,这就是“ToolBar1”控件。右键单击“ToolBar1”控件,选择“属性”命令,在弹出的“属性页”对话框的“通用”选项卡中进行设置(如图8.4.9)。在这个界面中,在图像列表下拉列表中选择“ImageList1”,即将按钮的图像与“ImageList1”相关联起来。一旦“ImageList1”与“ToolBar”相关联,“ImageList1”中的图图8.4.9 “ToolBar1”属性页“通用”选项卡界面在该界面上,“图像”中填入的是“ImageList1”中图像的索引值,该索引值对应的图像将作为插入按钮的图标。“

温馨提示

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

评论

0/150

提交评论