书签 分享 收藏 举报 版权申诉 / 86
上传文档赚钱

类型Visual-Basic程序设计-多重窗体与MDI窗体程序设计课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3591765
  • 上传时间:2022-09-22
  • 格式:PPT
  • 页数:86
  • 大小:1.07MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《Visual-Basic程序设计-多重窗体与MDI窗体程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Visual Basic 程序设计 多重 窗体 MDI 课件
    资源描述:

    1、 多重窗体与多重窗体与MDIMDI窗体概述窗体概述12.1多重窗体程序设计多重窗体程序设计12.2MDIMDI窗体程序设计窗体程序设计 12.3 在多重窗体中,窗体分为模态(在多重窗体中,窗体分为模态(Modal)和非)和非模态(模态(Nonmodal)两种类型。在屏幕上显示后用户)两种类型。在屏幕上显示后用户必须响应的窗体叫模态(必须响应的窗体叫模态(Modal)窗体,除非用户单)窗体,除非用户单击击OK(确定)或(确定)或Cancel(取消)按钮、或者关闭这(取消)按钮、或者关闭这个窗体,否则这种窗体将一直得到输入焦点。用户个窗体,否则这种窗体将一直得到输入焦点。用户可以随意在其间切换的窗

    2、体叫非模态(可以随意在其间切换的窗体叫非模态(Nonmodal)窗体或无模式窗体。为了方便用户使用,大多数窗体或无模式窗体。为了方便用户使用,大多数Windows下的应用程序在显示信息时,都使用非模下的应用程序在显示信息时,都使用非模态窗体。因此,在态窗体。因此,在Visual Basic中建立新窗体时,非中建立新窗体时,非模态窗体是缺省设置。窗体的很多属性都可以独立模态窗体是缺省设置。窗体的很多属性都可以独立设置,其中包括窗体的标题、大小、边框类型、前设置,其中包括窗体的标题、大小、边框类型、前景颜色、背景颜色、显示字库和背景画面等。景颜色、背景颜色、显示字库和背景画面等。MDI窗体允许创建

    3、在单个容器窗体中包含多个窗窗体允许创建在单个容器窗体中包含多个窗体的应用程序,允许用户同时显示多个文档,每个文体的应用程序,允许用户同时显示多个文档,每个文档显示在它自己的窗体中。档显示在它自己的窗体中。MDI窗体是有父子关系的窗体是有父子关系的窗体,可以根据窗体作用的不同,来确定窗体是父窗窗体,可以根据窗体作用的不同,来确定窗体是父窗体还是子窗体。文档或子窗体被包含在父窗体中,父体还是子窗体。文档或子窗体被包含在父窗体中,父窗体为应用程序中所有的子窗体提供工作空间,用户窗体为应用程序中所有的子窗体提供工作空间,用户在父窗体完成几乎所有的工作。例如:在父窗体完成几乎所有的工作。例如:Micro

    4、soft Excel 允许创建并显示不同样式的多文档窗体,每个允许创建并显示不同样式的多文档窗体,每个子窗体都被限制在子窗体都被限制在 Excel 父窗体的区域之内。当最小父窗体的区域之内。当最小化化 Excel父窗体时,所有的文档窗体都被最小化,只父窗体时,所有的文档窗体都被最小化,只有父窗体的图标显示在任务栏中。当关闭有父窗体的图标显示在任务栏中。当关闭Excel父窗父窗体时,所有的文档窗体都被关闭,但关闭某个文档窗体时,所有的文档窗体都被关闭,但关闭某个文档窗口时,口时,Excel父窗体不会被关闭。父窗体不会被关闭。具体什么时候选用单窗体程序,什么时候使用多具体什么时候选用单窗体程序,什

    5、么时候使用多重窗体或重窗体或MDI窗体呢?这需要根据应用程序的目的,窗体呢?这需要根据应用程序的目的,来决定使用哪种界面样式最好。例如:日历程序最好来决定使用哪种界面样式最好。例如:日历程序最好设成单窗体程序,因为没有必要同时打开一个以上日设成单窗体程序,因为没有必要同时打开一个以上日历;一个处理保险索赔的应用程序可能要设计成历;一个处理保险索赔的应用程序可能要设计成MDI窗体,使用多文档界面样式,因为一个职员很可能会窗体,使用多文档界面样式,因为一个职员很可能会同时处理一个以上索赔,或者需要对两个索赔进行比同时处理一个以上索赔,或者需要对两个索赔进行比较;而一个管理信息系统(较;而一个管理信

    6、息系统(MIS系统),需要完成的系统),需要完成的功能比较多,比如最基本的功能添加、修改、删除和功能比较多,比如最基本的功能添加、修改、删除和查询记录等,这些功能的实现都需要窗体界面,而这查询记录等,这些功能的实现都需要窗体界面,而这些窗体一般都是并列使用,所以像学生成绩管理系统些窗体一般都是并列使用,所以像学生成绩管理系统这样的应用程序,一般设计成多重窗体程序。这样的应用程序,一般设计成多重窗体程序。12.2 12.2 多重窗体程序设计多重窗体程序设计 在多重窗体程序中,要建立的界面有多个在多重窗体程序中,要建立的界面有多个窗体组成,每个窗体的界面的设计与前面学过窗体组成,每个窗体的界面的设

    7、计与前面学过的完全一样。程序代码也是针对每个窗体编写的完全一样。程序代码也是针对每个窗体编写的,因此也与单一窗体程序设计中的代码编写的,因此也与单一窗体程序设计中的代码编写类似,只要注意各个窗体之间的相互关系就可类似,只要注意各个窗体之间的相互关系就可以了。以了。多重窗体实际上是单一窗体的集合,而单多重窗体实际上是单一窗体的集合,而单一窗体是多重窗体程序设计的基础。掌握了单一窗体是多重窗体程序设计的基础。掌握了单一窗体程序的设计,多重窗体的程序设计是很一窗体程序的设计,多重窗体的程序设计是很容易的。容易的。1.1.添加窗体添加窗体 如果想在现有的工程中添加一个窗体,需如果想在现有的工程中添加一

    8、个窗体,需要使用要使用“添加窗体添加窗体”对话框(如图对话框(如图12-1所示)所示),可以用三种方法打开,可以用三种方法打开“添加窗体添加窗体”对话框:对话框:(1)通过)通过“工程工程”(Project)菜单中的)菜单中的“添添加窗体加窗体”(Add Form)命令)命令 (2)单击工具栏上的)单击工具栏上的“添加窗体添加窗体”按钮按钮 (3)在)在“工程资源管理器工程资源管理器”窗口内单击右键窗口内单击右键,在弹出菜单中选择,在弹出菜单中选择“添加添加”,再在下一级子,再在下一级子菜单中选择菜单中选择“添加窗体添加窗体”图12-1“添加窗体”对话框“新建”选项卡 在在“添加窗体添加窗体”

    9、对话框里,可以选择对话框里,可以选择“新建新建”选选项卡新建一个窗体,也可以选择项卡新建一个窗体,也可以选择“现存现存”选项卡把一选项卡把一个属于其他工程的窗体添加到当前工程中,这是因为个属于其他工程的窗体添加到当前工程中,这是因为每个窗体都是以独立的文件保存的(扩展名为每个窗体都是以独立的文件保存的(扩展名为frm)。)。当新建一个窗体时,可以选择欲建立窗体的类型当新建一个窗体时,可以选择欲建立窗体的类型(Visual Basic的不同版本预定义窗体集也不一样),的不同版本预定义窗体集也不一样),默认是建立一个新的空白窗体,你可以选择建立为特默认是建立一个新的空白窗体,你可以选择建立为特定任

    10、务设计的半成品窗体。程序中第一个窗体被默认定任务设计的半成品窗体。程序中第一个窗体被默认命名为命名为Form1,后续的窗体则分别命名为,后续的窗体则分别命名为Form2、Form3等,为了便于在代码中引用窗体,最好是根据等,为了便于在代码中引用窗体,最好是根据窗体的功能进行重新命名。窗体的功能进行重新命名。当添加一个已经存在的窗体到当前工程当添加一个已经存在的窗体到当前工程时,有两个问题需要注意:时,有两个问题需要注意:(1)该工程内的每个窗体的)该工程内的每个窗体的Name属性不能属性不能相同,否则不能将现存的窗体添加进来。相同,否则不能将现存的窗体添加进来。(2)在该工程内添加进来的现存窗

    11、体实际上)在该工程内添加进来的现存窗体实际上在多个工程中共享,因此,对该窗体所做的在多个工程中共享,因此,对该窗体所做的改变,会影响到共享该窗体的所有工程。改变,会影响到共享该窗体的所有工程。2.2.设置启动对象设置启动对象 在单一窗体程序中,程序的执行没有其他选择,即只能从这在单一窗体程序中,程序的执行没有其他选择,即只能从这个窗体开始执行。多重窗体程序由多个窗体构成,而且多个窗体个窗体开始执行。多重窗体程序由多个窗体构成,而且多个窗体多是并列关系,多是并列关系,Visual Basic怎么知道是从哪个窗体开始执行呢?怎么知道是从哪个窗体开始执行呢?程序运行过程中,首先执行的对象被称为启动对

    12、象。程序运行过程中,首先执行的对象被称为启动对象。Visual Basic规定,对于多重窗体程序,必须指定其中一个对象为启动对规定,对于多重窗体程序,必须指定其中一个对象为启动对象。缺省情况下,第一个创建的窗体被默认指定为启动对象,即象。缺省情况下,第一个创建的窗体被默认指定为启动对象,即启动窗体。启动对象既可以是窗体,也可以是启动窗体。启动对象既可以是窗体,也可以是Main子过程。如果子过程。如果启动对象是启动对象是Main子过程,则程序启动时不加载任何窗体,以后由子过程,则程序启动时不加载任何窗体,以后由该过程根据不同的情况决定是否加载或加载哪一个窗体。需要注该过程根据不同的情况决定是否加

    13、载或加载哪一个窗体。需要注意的是,意的是,Main子过程必须放在标准模块中,绝对不能放在窗体模子过程必须放在标准模块中,绝对不能放在窗体模块内。块内。可以通过可以通过“工程工程”菜单中菜单中“工程属性工程属性”命令来指定启动对象命令来指定启动对象。执行该命令后,将打开。执行该命令后,将打开“工程属性工程属性”对话框,然后选择该对话对话框,然后选择该对话框中的框中的“通用通用”选项卡,将显示的对话框如图选项卡,将显示的对话框如图12-2所示。所示。图12-2“工程属性”对话框的“通用”选项卡 在图在图12-2所示的对话框中,单击所示的对话框中,单击“启动对象启动对象”栏右端的箭头,将下拉显示栏右

    14、端的箭头,将下拉显示当前工程中所有窗体的列表,如图当前工程中所有窗体的列表,如图12-3所示。此时条形光标位于当前启动对象所示。此时条形光标位于当前启动对象上,如果需要改变,则单击作为启动对上,如果需要改变,则单击作为启动对象的名字,然后单击象的名字,然后单击“确定确定”按钮,即按钮,即可把所选择的窗体设置为启动对象。可把所选择的窗体设置为启动对象。图12-3 指定启动对象3.3.与多重窗体程序设计有关的语句和方法与多重窗体程序设计有关的语句和方法 在单窗体程序设计中,所有的操作在单窗体程序设计中,所有的操作都在一个窗体中完成,不需要在多个窗都在一个窗体中完成,不需要在多个窗体间切换。而在多窗

    15、体程序中,需要打体间切换。而在多窗体程序中,需要打开、关闭、隐藏或显示指定的窗体,这开、关闭、隐藏或显示指定的窗体,这可以通过相应的语句和方法来实现。可以通过相应的语句和方法来实现。下面是与多重窗体程序设计有关的语下面是与多重窗体程序设计有关的语句和方法:句和方法:(1)Load语句语句 该语句把一个在编程环境中已经建立的窗体装入内存。当该语句把一个在编程环境中已经建立的窗体装入内存。当Visual Basic执行了该语句后,窗体并没有显示出来,只是被调执行了该语句后,窗体并没有显示出来,只是被调入内存,但你可以在程序中的任一事件过程中访问它,而且使用入内存,但你可以在程序中的任一事件过程中访

    16、问它,而且使用它所定义的任何属性和方法。用它所定义的任何属性和方法。用Load语句装入新窗体的语法格语句装入新窗体的语法格式为:式为:Load 窗体名称窗体名称 例如,语句:例如,语句:Load Form2,则工程中的名称为,则工程中的名称为Form2的窗的窗体就会被调入内存。如果想把该窗体的体就会被调入内存。如果想把该窗体的Caption属性设置为属性设置为“系系统主界面统主界面”,可在任何事件过程中键入下述语句:,可在任何事件过程中键入下述语句:Form2.Caption=系统主界面系统主界面。在首次使用在首次使用Load语句将窗体调入内存时依次触发窗体的语句将窗体调入内存时依次触发窗体的

    17、Initialize和和Load事件。事件。(2)Unload语句语句 该语句与该语句与Load语句的功能相反,它从内存语句的功能相反,它从内存中删除指定的窗体。该语句的语法格式为:中删除指定的窗体。该语句的语法格式为:Unload 窗体名称窗体名称 Unload的一种常见用法是的一种常见用法是Unload Me,其,其意义是关闭窗体自己。在这里,关键字意义是关闭窗体自己。在这里,关键字Me代代表表Unload Me语句所在的窗体。语句所在的窗体。(3)Show 方法方法 该方法用来显示一个窗体,它兼有该方法用来显示一个窗体,它兼有加载和显示窗体两种功能。也就是说,加载和显示窗体两种功能。也就

    18、是说,使用使用Show方法时,如果窗体不在内存中方法时,如果窗体不在内存中(即以前没有执行(即以前没有执行Load语句),则语句),则Show方法自动把窗体装入内存,然后再显示方法自动把窗体装入内存,然后再显示出来。出来。Show方法的语法格式为:方法的语法格式为:窗体名称窗体名称.Show 模式模式 如果省略了如果省略了“窗体名称窗体名称”,则显示当前窗体。参数,则显示当前窗体。参数“模式模式”用来确定窗体是以模态加载还是非模态加载,它可以取用来确定窗体是以模态加载还是非模态加载,它可以取0和和1两个两个值(注意不是值(注意不是False和和True)。当)。当“模式模式”值为值为1(或常量

    19、(或常量vbModal)时,表示窗体是)时,表示窗体是“模态型模态型”窗体。在这种情况下,鼠标只在此窗体。在这种情况下,鼠标只在此窗体内起作用,不能到其他窗口内操作,只有在关闭该窗口后才窗体内起作用,不能到其他窗口内操作,只有在关闭该窗口后才能对其他窗口进行操作。例如,能对其他窗口进行操作。例如,Microsoft Word中中“帮助帮助”菜单菜单的的“关于关于”命令所打开的对话框窗口就是这种窗口。当命令所打开的对话框窗口就是这种窗口。当“模式模式”值为值为0(或省略该参数)时,表示窗体为(或省略该参数)时,表示窗体为“非模态型非模态型”窗口,不用窗口,不用关闭该窗体就可以对其他窗口进行操作。

    20、例如,要以非模态窗体关闭该窗体就可以对其他窗口进行操作。例如,要以非模态窗体形式显示形式显示Form2,可使用如下语句:,可使用如下语句:Form2.Show。Visual Basic提供独立的提供独立的Load语句使程序能够预先将窗体装入语句使程序能够预先将窗体装入内存,这样,内存,这样,Show方法执行得会非常快,用户往往感觉不到任何方法执行得会非常快,用户往往感觉不到任何延迟。建议你最好预先装入窗体,特别是当窗体包含很多对象或延迟。建议你最好预先装入窗体,特别是当窗体包含很多对象或艺术修饰时,这样做尤其必要。艺术修饰时,这样做尤其必要。(4)Hide方法方法 该方法用来将窗体暂时隐藏起来

    21、,该方法用来将窗体暂时隐藏起来,但并没有从内存中删除,因此它与但并没有从内存中删除,因此它与Unload语句的作用是不一样的。其语法语句的作用是不一样的。其语法格式为:格式为:窗体名称窗体名称.Hide 当省略窗体名称时,默认隐藏当前当省略窗体名称时,默认隐藏当前窗体。窗体。Hide方法和方法和Unload语句的区别:使用语句的区别:使用Hide方法把窗体隐藏后,窗体虽然看不见了,方法把窗体隐藏后,窗体虽然看不见了,但它但它仍驻留在内存中,可以供程序使用。隐藏窗体仍驻留在内存中,可以供程序使用。隐藏窗体和通过设置窗体的和通过设置窗体的Visible属性使窗体不可见的属性使窗体不可见的效果是相同

    22、的。使用效果是相同的。使用Unload语句卸载窗体,是语句卸载窗体,是把窗体从内存中清除,卸载窗体释放了用来存把窗体从内存中清除,卸载窗体释放了用来存贮窗体对象和图形的内存空间,但并不释放窗贮窗体对象和图形的内存空间,但并不释放窗体事件过程占用的空间,这些事件过程常驻内体事件过程占用的空间,这些事件过程常驻内存。窗体被卸载后,其运行时的值和属性也就存。窗体被卸载后,其运行时的值和属性也就丢失了。当再装入该窗体时,这些值恢复为程丢失了。当再装入该窗体时,这些值恢复为程序代码中设定的初始值。序代码中设定的初始值。4.4.不同窗体间数据的存取不同窗体间数据的存取 不同窗体数据的存取分为两种情况:不同

    23、窗体数据的存取分为两种情况:(1)存取控件中的属性)存取控件中的属性 在当前窗体中要存取另一个窗体中某个控件的属在当前窗体中要存取另一个窗体中某个控件的属性,表示如下:性,表示如下:另一个窗体名称控件名属性另一个窗体名称控件名属性 例如,设置当前窗体(例如,设置当前窗体(Form1)中的文本框()中的文本框(Text1)的值,使它等于另一个窗体()的值,使它等于另一个窗体(Form2)中的两)中的两个文本框(个文本框(Text1和和Text2)的数值之和,实现的语句)的数值之和,实现的语句如下:如下:Text1.Text=Val(Form2.Text1.Text)+Val(Form2.Text

    24、2.Text)(2)存取变量的值)存取变量的值 根据变量的定义位置和所使用的变根据变量的定义位置和所使用的变量定义语句的不同,量定义语句的不同,Visual Basic中的变中的变量可以分为量可以分为3类,即局部变量、模块变量类,即局部变量、模块变量及全局变量,其中模块变量包括窗体模及全局变量,其中模块变量包括窗体模块变量和标准模块变量。各种变量位于块变量和标准模块变量。各种变量位于不同的层次。不同的层次。在过程(事件过程或通用过程)内定义在过程(事件过程或通用过程)内定义的变量叫做局部变量,其作用域是它所在的的变量叫做局部变量,其作用域是它所在的过程。某一过程的执行只对该过程内的变量过程。某

    25、一过程的执行只对该过程内的变量产生作用,对其他过程中相同名字的局部变产生作用,对其他过程中相同名字的局部变量没有任何影响。因此,可以在不同的过程量没有任何影响。因此,可以在不同的过程中定义相同名字的局部变量,它们之间没有中定义相同名字的局部变量,它们之间没有任何关系。对于局部变量,可以使用任何关系。对于局部变量,可以使用Dim或或Static语句声明,也可以在需要时直接给出语句声明,也可以在需要时直接给出变量名。变量的类型可以使用类型说明符标变量名。变量的类型可以使用类型说明符标识。如果没有类型说明符,识。如果没有类型说明符,Visual Basic把把该变量指定为变体数据类型。该变量指定为变

    26、体数据类型。窗体变量可用于该窗体内的所有过程。一窗体变量可用于该窗体内的所有过程。一个窗体可以包含若干个过程,当同一窗体内的个窗体可以包含若干个过程,当同一窗体内的不同过程使用相同的变量时,则可以使用窗体不同过程使用相同的变量时,则可以使用窗体变量。在使用窗体变量前,必须先声明,也就变量。在使用窗体变量前,必须先声明,也就是说窗体变量不能默认声明。其方法是在程序是说窗体变量不能默认声明。其方法是在程序代码窗口的代码窗口的“对象对象”框中选择框中选择“通用通用”,并在,并在“过程过程”框中选择框中选择“声明声明”。声明的时候,可。声明的时候,可以使用以使用Dim、Private或或Public语

    27、句。标准模块语句。标准模块变量与窗体变量是类似,这里不在叙述。变量与窗体变量是类似,这里不在叙述。全局变量的作用域最大,可以在工程的每全局变量的作用域最大,可以在工程的每个模块、每个过程使用。和模块级变量类似,个模块、每个过程使用。和模块级变量类似,全局变量也在全局变量也在“通用通用”部分声明。所不同的是部分声明。所不同的是,全局变量必须用,全局变量必须用Public或或Global语句声明,不语句声明,不能用能用Dim语句声明,更不能用语句声明,更不能用Private语句声明语句声明。同时,全局变量只能在标准模块中声明,不。同时,全局变量只能在标准模块中声明,不能在过程或窗体模块中声明。在应

    28、用程序中任能在过程或窗体模块中声明。在应用程序中任何地方都可以修改全局变量,因此使用全局变何地方都可以修改全局变量,因此使用全局变量要格外小心,特别是在没有强制要求定义变量要格外小心,特别是在没有强制要求定义变量的情况下。量的情况下。我们在多个窗体之间存取变量时,变量必须是窗我们在多个窗体之间存取变量时,变量必须是窗体级变量,先用体级变量,先用Public语句声明,其引用格式如下:语句声明,其引用格式如下:窗体名称变量名窗体名称变量名 例如,工程中有两个窗体(例如,工程中有两个窗体(Form1和和Form2),),在在Form1的的“通用通用”里这样声明一个变量:里这样声明一个变量:Publi

    29、c test As String。则在。则在Form2中的就可以这样引用中的就可以这样引用Form1中中的变量:的变量:a=Form1.test 为了方便起见,要在多个窗体中存取的变量一般为了方便起见,要在多个窗体中存取的变量一般放在一个标准模块内,用放在一个标准模块内,用Public语句或语句或Global语句声明语句声明成全局变量。成全局变量。5.5.多重窗体程序设计举例多重窗体程序设计举例 例例12-1(参看教材(参看教材P228-230)例例12-2(参看教材(参看教材P230-232)12.3 MDI12.3 MDI窗体程序设计窗体程序设计12.3.1 MDI窗体特性窗体特性12.3

    30、.2 创建创建MDI应用程序应用程序 12.3.3 MDI窗体及子窗体窗体及子窗体12.3.4 MDI窗体的菜单和工具栏设计窗体的菜单和工具栏设计12.3.5 使用使用VB应用程序向导应用程序向导 MDI窗体程序由父窗口和子窗口窗体程序由父窗口和子窗口组成,父窗口又称为组成,父窗口又称为MDI窗体,它被窗体,它被作为子窗口的容器。子窗口又称为文作为子窗口的容器。子窗口又称为文档窗口,它用于显示各个文档,所有档窗口,它用于显示各个文档,所有的子窗口都具有相同的功能。的子窗口都具有相同的功能。12.3.1 MDI12.3.1 MDI窗体特性窗体特性 在运行时,在运行时,MDI 窗体及其所有的子窗体

    31、都呈现特窗体及其所有的子窗体都呈现特定的性质:定的性质:(1)所有子窗体均显示在)所有子窗体均显示在 MDI 窗体的工作空间内。像窗体的工作空间内。像其它的窗体一样,用户能移动子窗体和改变子窗体的其它的窗体一样,用户能移动子窗体和改变子窗体的大小,不过,它们被限制于这一工作空间内。大小,不过,它们被限制于这一工作空间内。(2)当最小化一个子窗体时,它的图标将显示于)当最小化一个子窗体时,它的图标将显示于 MDI 窗体上而不是在任务栏中。当最小化窗体上而不是在任务栏中。当最小化 MDI 窗体时,此窗体时,此 MDI 窗体及其所有子窗体将由一个图标来代表。当还窗体及其所有子窗体将由一个图标来代表。

    32、当还原原 MDI 窗体时,窗体时,MDI 窗体及其所有子窗体将按最小窗体及其所有子窗体将按最小化之前的状态显示出来。化之前的状态显示出来。(3)当最大化一个子窗体时,它的标题会与)当最大化一个子窗体时,它的标题会与 MDI 窗体的标题组合在一起并显示于窗体的标题组合在一起并显示于 MDI 窗窗体的标题栏上。体的标题栏上。(4)通过设定)通过设定 AutoShowChildren 属性,子窗体属性,子窗体可以在窗体加载时自动显示可以在窗体加载时自动显示(True)或自动隐藏或自动隐藏(False)。(5)活动子窗体的菜单(若有)将显示在)活动子窗体的菜单(若有)将显示在 MDI 窗体的菜单栏中,

    33、而不是显示在子窗体中。窗体的菜单栏中,而不是显示在子窗体中。MDI 窗体程序在所谓的窗体程序在所谓的“以文档为中心以文档为中心的应用的应用”中特别有用,在这种应用程序中,通中特别有用,在这种应用程序中,通常同时使用多个窗口来显示或编辑文档。常同时使用多个窗口来显示或编辑文档。12.3.2 12.3.2 创建创建MDIMDI应用程序应用程序 前面已经学习过,可以通过前面已经学习过,可以通过“添加窗体添加窗体”对话对话框添加窗体,但这不是框添加窗体,但这不是MDI窗体,只是多个普通窗窗体,只是多个普通窗体而已。如果创建一个体而已。如果创建一个MDI窗体应用程序,可以按窗体应用程序,可以按以下步骤执

    34、行:以下步骤执行:(1)在)在“工程工程”菜单中单击菜单中单击“添加添加MDI窗体窗体”菜单项菜单项,可以创建,可以创建MDI应用程序的父窗体。注意,一个应应用程序的父窗体。注意,一个应用程序只能有一个用程序只能有一个 MDI 窗体,如果工程已经有了一窗体,如果工程已经有了一个个 MDI窗体,则该窗体,则该“工程工程”菜单上的菜单上的“添加添加 MDI 窗窗体体”命令就不可使用。命令就不可使用。MDI应用程序的父窗体是子窗体的容器,在该应用程序的父窗体是子窗体的容器,在该窗体中可以有菜单栏、工具栏、状态栏等,但不可窗体中可以有菜单栏、工具栏、状态栏等,但不可以有文本框等控件。菜单栏、工具栏的建

    35、立我们在以有文本框等控件。菜单栏、工具栏的建立我们在后面几节中介绍。后面几节中介绍。(2)如果要创建子窗体,首先在)如果要创建子窗体,首先在“工程工程”菜单中单击菜单中单击“添加窗体添加窗体”菜单项,创建一个普通的窗体,然后将该窗体的菜单项,创建一个普通的窗体,然后将该窗体的 MDIChild 属性属性设为设为True。一个应用程序可以包含许多相似或者不同样式的。一个应用程序可以包含许多相似或者不同样式的 MDI 子窗体,若要建立多个子窗体,则重复上述操作就可以了。子窗体,若要建立多个子窗体,则重复上述操作就可以了。不过,创建以文档为中心的应用程序,一般要求在运行时能不过,创建以文档为中心的应

    36、用程序,一般要求在运行时能提供若干子窗体以存取不同的文档,而在设计时事先创建好若干提供若干子窗体以存取不同的文档,而在设计时事先创建好若干个子窗体的方法是不可取的。一般是先创建一个子窗体作为这个个子窗体的方法是不可取的。一般是先创建一个子窗体作为这个应用程序文档的模板,然后通过对象变量来实现。例如,假设已应用程序文档的模板,然后通过对象变量来实现。例如,假设已经建立了一个名称为经建立了一个名称为“frmMDIChild”的子窗体模板,则使用下的子窗体模板,则使用下面的语句:面的语句:Dim NewDoc As New frmMDIChild 就会为就会为“frmMDIChild”建立一个新的实

    37、例建立一个新的实例NewDoc,新实例,新实例具有与具有与“frmMDIChild”窗体相同的属性、控件和代码。窗体相同的属性、控件和代码。在运行时,子窗体显示在在运行时,子窗体显示在 MDI 父窗体工父窗体工作空间之内(其区域在父窗体边框以内及标题作空间之内(其区域在父窗体边框以内及标题与菜单栏之下)。在设计时,子窗体不是限制与菜单栏之下)。在设计时,子窗体不是限制在在 MDI 窗体区域之内,可以添加控件、设置窗体区域之内,可以添加控件、设置属性、编写代码以及设计子窗体功能,就像在属性、编写代码以及设计子窗体功能,就像在其它其它 Visual Basic 窗体中做的那样。窗体中做的那样。通过

    38、查看通过查看 MDIChild 属性或者检查工程资属性或者检查工程资源管理器,可以确定窗体是否是一个源管理器,可以确定窗体是否是一个 MDI 子子窗体。窗体。Visual Basic 在在“工程资源管理器工程资源管理器”中中为为 MDI 窗体与窗体与 MDI 子窗体显示了特定的图标子窗体显示了特定的图标,如图,如图12-10所示。所示。图12-10“工程资源管理器”中的MDI 窗体、MDI 子窗体和标准窗体例例12-3(参看教材(参看教材P234-236)12.3.3 MDI12.3.3 MDI窗体及子窗体窗体及子窗体1加载加载MDI窗体及子窗体窗体及子窗体 加载子窗体时,其父窗体(加载子窗体

    39、时,其父窗体(MDI 窗体)会窗体)会自动加载并显示。而加载自动加载并显示。而加载 MDI 窗体时,其子窗体时,其子窗体并不会自动加载。在例窗体并不会自动加载。在例12.3中,子窗体是中,子窗体是缺省的启动窗体,因而在程序运行时,子窗体缺省的启动窗体,因而在程序运行时,子窗体和和 MDI 窗体两者都会加载。如果在应用程序窗体两者都会加载。如果在应用程序中改变启动窗体为中改变启动窗体为MDIForm1,然后运行应用,然后运行应用程序,则只有程序,则只有 MDI 窗体被加载。当从窗体被加载。当从“文件文件”菜单中选取菜单中选取“新建新建”命令时,才会加载第一命令时,才会加载第一个子窗体。个子窗体。

    40、MDI 窗体有窗体有AutoShowChildren 属性,决属性,决定是否自动显示子窗体。如果该属性被设置定是否自动显示子窗体。如果该属性被设置为为True,则当改变子窗体的属性(如,则当改变子窗体的属性(如Caption等)后,会自动显示该子窗体,不再需要使等)后,会自动显示该子窗体,不再需要使用用Show 方法;如果设置该属性为方法;如果设置该属性为False,则改,则改变子窗体的属性值后,不会自动显示该子窗变子窗体的属性值后,不会自动显示该子窗体,子窗体处于隐藏状态,直至用体,子窗体处于隐藏状态,直至用Show 方法方法把它们显示出来。这就允许在子窗体变成可把它们显示出来。这就允许在子

    41、窗体变成可见之前更新标题、位置和菜单等各种细节。见之前更新标题、位置和菜单等各种细节。2设置子窗体的大小和位置设置子窗体的大小和位置 如果如果 MDI 子窗体具有大小可变的边框子窗体具有大小可变的边框即即 BorderStyle=2,在其装载时,在其装载时,Windows 将决定其将决定其初始的高度、宽度和位置。边框大小可变的子窗体,初始的高度、宽度和位置。边框大小可变的子窗体,其初始大小与位置取决于其初始大小与位置取决于 MDI 窗体的大小,而不是设窗体的大小,而不是设计时子窗体的大小。当计时子窗体的大小。当 MDI 子窗体的边框大小不可变子窗体的边框大小不可变(即(即 BorderStyl

    42、e=0、1 或或3)时,则它将用设计时的)时,则它将用设计时的 Height 和和 Width 属性被载入。属性被载入。如果设置如果设置 AutoShowChildren 为为 False,则在,则在 MDI 子窗体载入以后,把它设为可见状态之前,可以改变子窗体载入以后,把它设为可见状态之前,可以改变其大小和位置。其大小和位置。定位窗体的代码最好放在窗体的定位窗体的代码最好放在窗体的Load过程过程中,这样会在窗体实际出现在屏幕上之前将窗中,这样会在窗体实际出现在屏幕上之前将窗体位置确定。要将窗体居中,需要在窗体的体位置确定。要将窗体居中,需要在窗体的Load过程中简单地添加代码来计算并指定窗

    43、体过程中简单地添加代码来计算并指定窗体左上角的位置,如下列代码所示:左上角的位置,如下列代码所示:Me.Left=(Screen.Width-Me.Width)/2 Me.Top=(Screen.Height-Me.Height)/2 利用坐标系统可以将窗体定位于屏幕或利用坐标系统可以将窗体定位于屏幕或MDI窗体的任意位置。窗体的任意位置。3MDI窗体程序子窗体的排列顺序和方式窗体程序子窗体的排列顺序和方式 在在MDI应用程序中,缺省状态下子窗体是按照窗口应用程序中,缺省状态下子窗体是按照窗口打开的顺序排列的:当前活动窗体排在最前端,最先打开的顺序排列的:当前活动窗体排在最前端,最先打开的窗体

    44、排在最底端。我们可以借助打开的窗体排在最底端。我们可以借助ZOrder方法动方法动态地改变子窗体的排列顺序。态地改变子窗体的排列顺序。ZOrder方法的语法为:方法的语法为:窗体名称窗体名称.ZOrder Position 其中,其中,Position取值为取值为0时表示对象移至最前端,为时表示对象移至最前端,为1时表示对象移至最底端,缺省时值为时表示对象移至最底端,缺省时值为0。例如,某一。例如,某一MDI应用程序有三个子窗体:应用程序有三个子窗体:Form1、Form2和和Form3,若要将,若要将Form3移至最底端,则可在设计代码时加上移至最底端,则可在设计代码时加上 Form3.Zo

    45、rder 1 即可。即可。利用利用Zorder方法我们也可以创建浮动窗体,浮动方法我们也可以创建浮动窗体,浮动窗体总是浮动到表面,也就是说它可以被其他窗体覆窗体总是浮动到表面,也就是说它可以被其他窗体覆盖,但马上自动变成当前窗口并显示在所有窗体的最盖,但马上自动变成当前窗口并显示在所有窗体的最上层。上层。要创建浮动窗体,需要在窗体上添加一个定时器要创建浮动窗体,需要在窗体上添加一个定时器控件,并将它的控件,并将它的Interval属性设置为想让窗体浮现的时属性设置为想让窗体浮现的时间,如间,如500毫秒。在毫秒。在Timer1_Timer事件过程中编写如事件过程中编写如下代码,便可以使用下代码

    46、,便可以使用ZOrder方法使窗体浮动到顶部:方法使窗体浮动到顶部:Private Sub Timer1_Timer()ZOrder End Sub 使用过使用过Word的用户都知道,的用户都知道,Word可同时打开多可同时打开多个文档,并能以不同方式对文档窗口进行排列,如平个文档,并能以不同方式对文档窗口进行排列,如平铺、层叠等。这种重新排列子窗体的功能,在铺、层叠等。这种重新排列子窗体的功能,在MDI应应用程序中是可以通过编程来实现的。具体方法就是在用程序中是可以通过编程来实现的。具体方法就是在相应的菜单控件的相应的菜单控件的Click事件中调用事件中调用Arrange 方法,使方法,使用

    47、用 Arrange 方法可以重新对齐子窗体,可以层叠、水方法可以重新对齐子窗体,可以层叠、水平平铺或者沿着平平铺或者沿着 MDI 窗体的下部排列子窗体图标等方窗体的下部排列子窗体图标等方式来显示子窗体。式来显示子窗体。Arrange 方法的语法为:方法的语法为:MDI窗体对象窗体对象.Arrange Arrangement 其中,其中,Arrangement用来指定如何排列用来指定如何排列MDI应用应用程序的子窗体,其值可以是常数或是数值,程序的子窗体,其值可以是常数或是数值,Arrangement的取值如表的取值如表12-2所示。所示。表12-2 Arrangement的取值常数值描述vbC

    48、ascade0层叠所有非最小化MDI子窗体vbTileHorizontal1水平平铺所有非最小化MDI子窗体vbTileVertical2垂直平铺所有非最小化MDI子窗体vbArrangeIcons3重排最小化MDI子窗体的图标 例如:若例如:若“平铺平铺”菜单项名为菜单项名为mnuHorizon,可编,可编写如下代码,实现子窗体的平铺:写如下代码,实现子窗体的平铺:Private Sub mnuHorizon_Click()MDIForm1.Arrange vbTileHorizontal MDIForm1为为MDI窗体名称窗体名称 End Sub 当平铺或者层叠有着固定边框类型的子窗体时,

    49、当平铺或者层叠有着固定边框类型的子窗体时,每个子窗体都像具有可变尺寸边框那样被定位,这使每个子窗体都像具有可变尺寸边框那样被定位,这使得子窗体可能重叠。得子窗体可能重叠。即使即使MDI窗体被最小化,仍可以重新排列窗口和窗体被最小化,仍可以重新排列窗口和图标,当图标,当MDI窗体最大化时,可以看到重排的结果。窗体最大化时,可以看到重排的结果。4 4维护子窗体的状态信息维护子窗体的状态信息 当子窗体被卸载时,其中的内容也会随之消当子窗体被卸载时,其中的内容也会随之消失,所以在用户决定退出失,所以在用户决定退出 MDI 应用程序时,必应用程序时,必须有保存信息的机会,让用户执行存盘操作,这须有保存信

    50、息的机会,让用户执行存盘操作,这样才能确保数据不会丢失。当数据没有改变而去样才能确保数据不会丢失。当数据没有改变而去存盘是没有意义的,因此,应用程序必须随时都存盘是没有意义的,因此,应用程序必须随时都能确定自上次保存以来子窗体中的数据是否有改能确定自上次保存以来子窗体中的数据是否有改变。这可以通过在每个子窗体中声明一个公用变变。这可以通过在每个子窗体中声明一个公用变量来实现此功能,例如:量来实现此功能,例如:Public DataChangeed As Boolean 当子窗体中的内容改变时,可将此变量设为当子窗体中的内容改变时,可将此变量设为True。在保存完数据后,再设为。在保存完数据后,

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Visual-Basic程序设计-多重窗体与MDI窗体程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-3591765.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库