Visual Basic.NET程序设计教程(第2版):第8章 多重窗体和多文档_第1页
Visual Basic.NET程序设计教程(第2版):第8章 多重窗体和多文档_第2页
Visual Basic.NET程序设计教程(第2版):第8章 多重窗体和多文档_第3页
Visual Basic.NET程序设计教程(第2版):第8章 多重窗体和多文档_第4页
Visual Basic.NET程序设计教程(第2版):第8章 多重窗体和多文档_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第8章多重窗体和多文档界面8.4多重窗体应用程序MDI窗体应用程序MDI窗体菜单综合应用8.1多重窗体应用程序8.1.1窗体特殊属性1.指定窗体启动位置(StartPosition)所谓窗体的启动位置,是指程序开始运行后窗体在屏幕中的位置,这个位置可以通过窗体的StartPosition属性来设置。StartPosition属性可以在属性窗口中进行设置,也可以在程序中动态设置。设置该属性的格式如下:语法:

窗体名称.StartPosition=位置值8.1.1窗体特殊属性说明:

(1)窗体名称是代表窗体对象的名称。

(2)位置值是FormStartPosition枚举类型,指定窗体的启动位置,取值见表8.1。取值说明CenterParent窗体在其父窗体中居中。CenterScreen窗体在屏幕中居中。Manual窗体位置由设计时的位置决定。WindowsDefaultBounds窗体定位在Windows默认位置,其边界由Windows默认决定。WindowsDefaultLocation窗体定位在Windows默认位置,其尺寸由窗体大小指定。默认值表8.1FormStartPosition的取值在设置窗体的启动位置的值前面,应加上FormStartPosition枚举类型名称,例如,设置窗体的启动位置为在屏幕中居中,方法如下:Me.StartPosition=FormStartPosition.CenterScreen 8.1.1窗体特殊属性2.顶层窗体(TopMost)在一般情况下,活动窗体位于应用程序的其他窗体的前面,当失去焦点后,该窗体不一定还在最前面。可以使用窗体的TopMost属性,来指定窗体始终在最顶层,即使失去焦点成为非活动窗体,仍然是可见的。TopMost属性可以在属性窗口中进行设置,也可以在程序中动态设置。设置该属性的格式如下:语法:

窗体名称.TopMost=值3.窗体透明度(Opacity)在一般情况下,窗体是不透明的,即窗体会覆盖背后的其他对象(如其他窗体),被覆盖的对象不可见。可以通过窗体的Opacity属性,来指定窗体的透明度。Opacity属性可以在属性窗口中进行设置,也可以在程序中动态设置。设置该属性的格式如下:语法:

窗体名称.Opacity=值8.1.2窗体特殊方法1.关闭窗体(Close方法)关闭窗体,将释放该窗体所占用的资源,同时释放在该窗体对象内建立的所有资源。如果关闭的是应用程序的启动窗体,将结束应用程序。该方法的调用格式如下:语法:

窗体名称.Close要关闭当前窗体,可以使用Me关键词,否则应使用窗体对象的名字(即窗体的Name属性值),示例如下:Me.Close '关闭当前窗体。Form1.Close '关闭名为Form1的窗体。8.1.2窗体特殊方法2.显示窗体(Show方法)Show方法用来显示窗体。显示窗体相当于把窗体的Visible属性设置为True,在调用Show方法后,只要不调用Hide方法,窗体的Visible属性始终为True。Show方法的调用格式如下:语法:

窗体名称.Show例如,要显示当前窗体,可以省略窗体名称,否则应使用窗体对象的名字,方法如下:Show '显示当前窗体。Form1.Show '显示名为Form1的窗体。8.1.2窗体特殊方法3.显示模态型窗体(ShowDialog方法)ShowDialog方法用来将窗体显示为模态型窗体。当打开模态型窗体后,鼠标只在该窗体内有效,不能到其他窗体中操作,只有关闭了该窗体后,才能对其他窗体进行操作。而用Show方法显示的是非模态窗口。ShowDialog方法的调用格式如下:语法:

窗体名称.ShowDialog例如,将Form1窗体显示为模态窗体,方法如下:Form1.ShowDialog '显示名为Form1的模态窗体。8.1.2窗体特殊方法4.隐藏窗体(Hide方法)Hide方法用来隐藏窗体。隐藏窗体实际上是使窗体不在屏幕上显示,但仍保存在内存中,并没有从内存中卸载。隐藏窗体相当于把窗体的Visible属性设置为False,在调用Hide方法后,只要不调用Show方法,窗体的Visible属性始终为False。Hide方法的调用格式如下:语法:

窗体名称.Hide例如,要隐藏当前窗体,可以省略窗体名称,否则应使用窗体对象的名字,方法如下:Hide '隐藏当前窗体。Form1.Hide '隐藏名为Form1的窗体。8.1.3模块与多重窗体(1)添加模块在项目中添加模块,可以通过“项目”菜单中的“添加模块”命令来建立。执行“添加模块”命令后,显示“添加新项”对话框,如图8.1所示。8.1.3模块与多重窗体(2)模块结构模块以Module开头,以EndModule结束,它的一般格式如下:Module模块名

'变量、常量或过程定义。EndModule 8.1.4指定启动窗体指定某个窗体为启动窗体是通过“属性页”对话框进行的,操作步骤如下:(1)在“项目”菜单中单击当前项目属性,或用鼠标右击解决方案资源管理器窗口中项目的名字,在弹出菜单中单击“属性”,即可打开“属性页”对话框,如图8.2所示。8.1.4指定启动窗体(2)在“属性页”左部的列表中,选择“应用程序”现,在右部的“启动窗体”下拉列表框中,选择要设置为启动窗体的窗体名,单击“确定”按钮,即可将所选择的窗体设置为启动窗体。8.1.5SubMain过程在多重窗体程序中,有时需要在窗体显示前进行一些初始化,这就需要在启动程序时先执行一个初始化的过程,然后再显示窗体。在VB.NET中,可以定义这样的过程,这个过程称为启动过程,它有一个特定的过程名字Main,通常叫做SubMain过程。SubMain过程只能在模块中定义,它的一般格式如下:SubMain() '进行初始化的语句EndSub 8.1.6创建多重窗体应用程序【例8.1】创建由2个窗体和一个模块构成的项目,在模块中定义SubMain过程,并将它设置为启动过程。通过窗体1中的按钮可以显示出窗体2,在窗体2中可以调用模块中定义的显示一个消息的全局过程。界面设计:

在第一个窗体(Forml)中,添加2个命令按钮(Button1、Button2),在第二个窗体(Form2)中,也添加2个命令按钮(Button1、Button2)。表8.2列出了2个窗体中主要的对象及其属性。对象对象名属性名属性值FormForm1Text第一个窗体ButtonButton1Text显示Form2Button2Text结束FormForm2Text第二个窗体ButtonButton1Text返回Button2Text调用过程表8.2多重窗体及控件属性表8.1.6创建多重窗体应用程序运行后界面效果如图8.3所示。

8.1.6创建多重窗体应用程序程序代码设计:为了设置SubMain启动过程,在项目中添加了一个模块Module1,并定义了一个SubMain过程和一个全局过程showmsg,程序中使用了DoEvents方法,所以在模块中引入了System.Windows.Forms.Application名称空间。'引入名称空间System.Windows.Forms.Application,以便调用DoEvents方法ImportsSystem.Windows.Forms.ApplicationModuleModule1PublicF1AsNewForm1 '定义全局变量,将第一个窗体对象声明为全局变量。Submain()F1.Show() '显示第一个窗体DoWhileTrueDoEvents() '把控制权交给其他对象LoopEndSubPublicSubshowmsg() '定义全局过程MsgBox("调用全局过程示例")EndSubEndModule8.1.6创建多重窗体应用程序第一个窗体中有2个按钮,当单击“显示Form2”按钮后,显示出第二个窗体,同时隐藏第一个窗体;当单击“结束”按钮后,结束程序运行,相应的单击事件程序如下:'“显示Form2”按钮事件代码PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton1.ClickDimform2AsNewForm2 '创建Form2窗体实例form2.StartPosition=FormStartPosition.CenterScreenform2.Show() '显示第二个窗体Me.Hide() '隐藏当前窗体EndSub'“结束”按钮事件代码PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlesButton2.ClickEnd '结束程序EndSub8.1.6创建多重窗体应用程序第二个窗体中有2个按钮,当单击“调用过程”按钮后,将调用模块中定义的显示“调用全局过程示例”消息的“showmsg”全局过程;当单击“返回”按钮后,显示出第一个窗体,同时隐藏本窗体,相应的单击事件程序如下:'“返回”按钮事件代码。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton1.ClickModule1.F1.Show() '访问模块中全局变量F1,显示第一个窗体Me.Hide() '隐藏当前窗体EndSub'“调用过程”按钮事件代码。PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlesButton2.ClickModule1.showmsg() '调用模块中定义的全局过程EndSub8.2MDI窗体应用程序8.2.1与MDI有关的属性和方法1.指定MDI父窗体(IsMdiContainer)IsMdiContainer属性可以指定窗体是否为MDI父窗体,默认值为False,表示本窗体不是MDI父窗体,若为True即为MDI父窗体。IsMdiContainer属性可以在属性窗口中进行设置,也可以在程序中动态设置。设置该属性的格式如下:语法:

窗体名称.IsMdiContainer=值2.指定MDI子窗体(MdiParent)MdiParent属性可以指定本窗体的父窗体,从而将本窗体设置为MDI子窗体。MdiParent属性不能在属性窗口中进行设置,只能在程序中动态设置。设置该属性的格式如下:语法:

窗体名称.MdiParent=父窗体名称例如,指定当前窗体是Form2窗体的父窗体,Form2窗体为子窗体,方法如下:DimNewDocAsNewForm2() '创建Form2窗体的实例。NewDoc.MdiParent=Me '指定当前窗体为Form2的父窗体。8.2.1与MDI有关的属性和方法3.判断MDI子窗体(IsMdiChild)IsMdiChild属性可以判断窗体是否为MDI子窗体,它是一个只读属性,不能设置它的值,只能在运行时读取该值。若为True,表示该窗体是MDI子窗体,否则不是。4.获取MDI子窗体(ActiveMdiChild)ActiveMdiChild属性用来获取当前活动的MDI子窗体,如果当前没有活动的MDI子窗体,则返回空引用(Nothing)。可以用它来确定MDI应用程序中是否有打开的MDI子窗体。ActiveMdiChild属性是一个运行时属性,通过它可以对当前活动的MDI子窗体执行操作。8.2.1与MDI有关的属性和方法5.排列MDI子窗体(LayoutMdi)LayoutMdi是窗体的一个方法,该方法的功能是在MDI窗体中,按不同的方式排列其中的MDI子窗体或图标。调用LayoutMdi方法的格式如下:语法:

MDI窗体名称.LayoutMdi(排列方式

)说明:

(1)MDI窗体名称代表MDI父窗体对象的实例。

(2)排列方式为MdiLayout枚举类型,表示排列方式。可取值见表8.3。枚举值说明Cascade“层叠式”排列各MDI子窗体。TileHorizontal“水平平铺式”排列各MDI子窗体。TileVertical“垂直平铺式”排列各MDI子窗体。ArrangeIcons当MDI子窗体被最小化为图标后,该方式将使图标在父窗体的底部重新排列。表8.3MdiLayout枚举值例如,假设当前窗体是MDI父窗体,设置其中的子窗体呈“水平平铺式”排列,方法如下:Me.LayoutMdi(MdiLayout.TileHorizontal) 8.2.2建立MDI应用程序1.建立MDI父窗体对于项目中的任何一个窗体来说,只要将其IsMdiContainer属性设置为True,就可以使其成为MDI父窗体。在默认情况下,IsMdiContainer属性值为False,表示该窗体不是MDI父窗体。通常在设计阶段,把第一个创建的窗体设置为MDI父窗体,后续建立的窗体设置为MDI子窗体。2.建立MDI子窗体当在项目中添加一个新窗体后,默认的情况下,该窗体是普通窗体,在设计阶段不能将其设置为MDI子窗体,只能在运行时,通过代码设置其MdiParent属性,将它设置为MDI子窗体。设置的方法如8.2.1所述。子窗体建立后,不会立即在MDI父窗体内显示出来,必须执行显示窗体的Show方法,才能显示出该窗体,例如:DimNewDocAsNewForm2() '创建Form2窗体的实例。NewDoc.MdiParent=Me '指定当前窗体为Form2的父窗体。NewDoc.Show '显示出MDI子窗体Form2。8.2.2建立MDI应用程序3.设置MDI父窗体为启动窗体如果将第一个窗体设置为MDI父窗体,那么系统默认将第一个窗体指定为启动窗体,否则,就需要把MDI父窗体设置为启动窗体,具体操作方法如8.1.4所述。4.编写程序代码建立了MDI父窗体和MDI子窗体,指定了启动窗体后,就可以像普通窗体应用程序一样,设计各MDI窗体界面以及实现相应功能的程序代码了。8.2.2建立MDI应用程序【例8.2】建立MDI窗体应用程序,通过窗体上的按钮显示MDI子窗体。界面设计:

在第一个窗体(Forml)中,有2个命令按钮(Button1、Button2),第二个窗体(Form2)中,添加1个命令按钮(Button1)。表8.4列出了2个窗体中主要的对象及其属性。对象对象名属性名属性值FormForm1TextMDI应用程序IsMdiContainerTrueButtonButton1Text显示子窗体Button2Text结束FormForm2TextMDI子窗体ButtonButton1Text关闭表8.4MDI窗体及控件属性表8.2.2建立MDI应用程序运行后界面效果如图8.4所示。8.2.2建立MDI应用程序程序代码设计:第一个窗体中有2个按钮,当单击“显示子窗体”按钮后,在MDI主窗体中显示出第二个窗体;当单击“结束”按钮后,结束程序运行,相应的单击事件程序如下:'显示Form2按钮事件代码PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton1.ClickDimform2AsNewForm2 '创建Form2窗体实例form2.MdiParent=Me '设置form2为MDI子窗体form2.WindowState=FormWindowState.Maximized '子窗体最大化显示form2.Show() '显示子窗体EndSub'结束按钮事件代码PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton2.ClickEnd '结束程序EndSub8.2.2建立MDI应用程序第二个窗体中有1个按钮,当单击“关闭”按钮后,即关闭本窗体,相应的单击事件程序如下:'关闭按钮事件代码。PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesButton1.ClickMe.Close() '关闭当前窗体EndSub8.3MDI窗体菜单8.3.1MDI菜单的特殊属性菜单条的MdiWindowListItem属性指定MDI窗体中的哪个菜单项可以显示MDI子窗体标题列表。默认值为None,表示不能显示子菜单标题列表;若其值为某个主菜单项名称,即表示该主菜单可以显示。在程序运行期间,VB.NET自动显示和管理子窗体标题列表。MdiWindowListItem属性可以在设计阶段设置,也可以在代码中设置。设置该属性的语法格式如下:语法:

菜单条名.MdiWindowListItem=菜单项名称8.3.2建立MDI菜单应用程序1.建立MDI父窗体建立方法如8.2.2所述。2.建立MDI子窗体建立方法如8.2.2所述。3.设置MDI父窗体为启动窗体设置方法如8.2.2所述。4.添加菜单在MDI父窗体中或在MDI子窗体中添加MenuStrip控件,建立各菜单项,建立方法参阅第6章所述。若要求某菜单项可以显示MDI子窗体标题列表,参照前述方法,设置其MdiWindowListItem属性值为该菜单项名称。5.编写各菜单项事件代码建立了MDI菜单后,即可编写各菜单项的单击事件代码。至此,即建立了MDI菜单应用程序。8.3.2建立MDI菜单应用程序【例8.3】在MDI父窗体上建立主菜单,通过菜单命令实现子窗体的建立与显示。1.界面设计

建立第一个窗体(Forml),在其中添加一个主菜单控件(MenuStrip1);建立第二个窗体(Form2,录入学生成绩)和第三个窗体(Form3,关于),将Forml设置为MDI主窗体,并设置其为启动窗体。表8.5列出了主菜单的属性设置。菜单项标题(Text)名称(Name)系统主菜单项系统sysMenuItem退出子菜单项退出quitMenuItem录入主菜单项录入importMenuItem学生成绩子菜单项学生成绩inportscoreMenuItem窗口主菜单项窗口windowMenuItem帮助主菜单项帮助helpMenuItem使用指南子菜单项使用指南bookhelpMenuItem关于子菜单项关于aboutMenuItem表8.5菜单项属性设置8.3.2建立MDI菜单应用程序运行后界面效果如图8.5所示。8.3.2建立MDI菜单应用程序2.属性设置将主菜单MenuStrip1的MdiWindowListItem属性设置为“windowMenuItem”,即设置标题为“窗口”的菜单项为可显示MDI子窗体标题列表。3.程序代码设计在“录入”菜单中有一个菜单项,当单击“学生成绩”菜单项时,将创建一个新MDI子窗体“录入学生成绩”并显示;在“帮助”菜单中有一个菜单项,当单击“关于”菜单项时,将创建一个新MDI子窗体“关于”并显示;同时,在“窗口”菜单项中可以显示已打开的所有窗体标题列表;当单击“退出”菜单项后,结束程序运行,相应的单击事件程序如下:“录入学生成绩”菜单项事件代码:PrivateSubimportscoreMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesimportscoreMenuItem.ClickDimform2AsNewForm2 '创建Form2窗体实例form2.MdiParent=Me '设置form2为MDI子窗体form2.WindowState=FormWindowState.Normal '子窗体最大化显示form2.Show()EndSub8.3.2建立MDI菜单应用程序“关于”菜单项事件代码:PrivateSubaboutMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesaboutMenuItem.ClickDimform3AsNewForm3 '创建Form3窗体实例Form3.MdiParent=Me '设置form3为MDI子窗体Form3.WindowState=FormWindowState.Normal '子窗体最大化显示Form3.Show()EndSub“退出”菜单项事件代码:PrivateSubquitMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesquitMenuItem.ClickEnd '结束程序EndSub8.4综合应用【例8.4】在MDI父窗体上建立主菜单,通过菜单命令实现子窗体的建立与显示,并显示子窗体的菜单项。同时,还提供对各打开的子窗体的不同形式的排列功能。另外,还建立一个工具栏,提供对所有的菜单功能的快速访问。1.界面设计

建立第一个窗体(Forml),在其中添加一个主菜单控件(MenuStrip1)、一个工具栏控件(ToolStrip1);建立第二个窗体(Form2,录入学生成绩)和第三个窗体(Form3,关于),在Form2中添加一个菜单控件(MenuStrip2)。将Forml设置为MDI主窗体,并设置其为启动窗体。表8.6、表8.7、表8.8分别列出了主窗体和子窗体对象和菜单的属性设置,运行后界面效果如图8.6所示。8.4综合应用2.属性设置将主菜单MenuStrip1的MdiWindowListItem属性设置为“windowMenuItem”,即设置标题为“窗口”的菜单项为可显示MDI子窗体标题列表。利用ToolStrip1控件的“项集合编辑器”为ToolStrip1控件添加6个按钮,并为每个按钮选择适当的图标。3.程序代码设计在“录入”菜单中单击“学生成绩”子菜单项时,将创建一个新MDI子窗体“录入学生成绩”并显示;在“帮助”菜单中有一个菜单项,当单击“关于”菜单项时,将创建一个新MDI子窗体“关于”并显示;同时,在“窗口”菜单项中可以显示已打开的所有窗体标题列表;当单击“退出”菜单项后,结束程序运行,相应的单击事件程序如下:“录入学生成绩”菜单项事件代码:PrivateSubimportscoreMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlesimportscoreMenuItem.ClickDimform2AsNewForm2 '创建Form2窗体实例form2.MdiParent=Me '设置form2为MDI子窗体form2.WindowState=FormWindowState.Normal '子窗体最大化显示form2.Show()EndSub8.4综合应用“关于”菜单项事件代码:PrivateSubaboutMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesaboutMenuItem.Click Dimform3AsNewForm3 '创建Form3窗体实例 Form3.MdiParent=Me '设置form3为MDI子窗体 Form3.WindowState=FormWindowState.Normal '子窗体最大化显示 Form3.Show()EndSub“退出”菜单项事件代码:PrivateSubquitMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_

HandlesquitMenuItem.Click End '结束程序EndSub8.4综合应用“窗口”菜单项的程序设计:在“窗口”菜单中有三个菜单项,当单击“层叠”菜单项时,将按层叠方式排列所有子窗口;当单击“水平平铺”菜单项时,将按水平平铺方式排列所有子窗口;当单击“垂直平铺”菜单项时,将按垂直平铺方式排列所有子窗口。其中层叠方式执行效果如图8.7所示。8.4综合应用相应的单击事件程序如下:“层叠”菜单项事件代码:PrivateSubcascadeMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)_ HandlescascadeMenuItem.Click Me.LayoutMdi(MdiLayout.Cascade) '层叠方式排列EndSub“水平平铺”菜单项事件代码:PrivateSubhorizonMenuItem_Click(ByValsenderAsSystem.O

温馨提示

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

评论

0/150

提交评论