菜单多重窗体多重文档界面剪贴板_第1页
菜单多重窗体多重文档界面剪贴板_第2页
菜单多重窗体多重文档界面剪贴板_第3页
菜单多重窗体多重文档界面剪贴板_第4页
菜单多重窗体多重文档界面剪贴板_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

菜单是Windows界面的重要组成部分。菜单的基本作用是提供人机对话界面,便于用户选择应用程序的各种功能,管理应用系统,控制各种功能模块的运行。 菜单可以分成两种基本类型:下拉式菜单和弹出式菜单。启动VB后,单击File菜单所显示的是下拉菜单;而在Windows操作时,单击鼠标右键后显示的菜单是弹出式菜单。9.1 菜单

一个应用程序往往有一个主菜单,其中包括若干候选项目。主菜单的每个项目又可以“下拉”出下一级菜单,称为子菜单。9.1.1下拉式菜单结构9.1.1下拉式菜单结构—例主菜单行子菜单

在VB中,把菜单项作为一个控件处理,使用菜单编辑器设计菜单的过程就是对菜单项属性设置的过程。菜单编辑器是一个在窗体创建菜单或者修改一个已有菜单的工具。9.1.2编辑下拉菜单

当编辑对象为窗体时,从“工具”菜单中选取“菜单编辑器”项目,就会打开“菜单编辑器”窗口。1.菜单编辑器组成属性区编辑区菜单项显示区例9-1

简单加减法练习程序界面设计:窗体上设置6个标签:lbl1,lbl3用于显示左操作数和右操作数;lbl2用于显示操作符;lbl4显示等号“=”;lbl5显示“成绩”;lbl6显示成绩值;文本框txt1用于接收用户输入;命令按钮cmd1启动练习;命令按钮cmd2结束程序。程序代码:OptionExplicitDimnAsInteger,optAsIntegerDimxAsInteger,yAsInteger,rAsIntegerDimselAsBooleanPrivateSubForm_Load()lbl1.Caption=""lbl2.Caption=""lbl3.Caption=""lbl6.Caption=""txt1.Text=""cmd1.Enabled=False'屏蔽命令按钮EndSubPrivateSubn10_Click()'选择十位

n=10sel=TrueEndSubPrivateSubn100_Click()'选择百位

n=100sel=TrueEndSubPrivateSuboptadd_Click()'选择加法

opt=1IfselThencmd1.Enabled=TrueEndSubPrivateSuboptsub_Click()'选择减法

opt=2IfselThencmd1.Enabled=TrueEndSubPrivateSubcmd1_Click()'产生第一个算式

Randomizetxt1.Text=""txt1.SetFocusx=Int(n*Rnd):y=Int(n*Rnd)lbl1.Caption=Str(x):lbl3.Caption=Str(y)Ifopt=1Thenlbl2.Caption="+"r=x+yElselbl2.Caption="-"r=x-yEndIfEndSubPrivateSubtxt1_KeyPress(KeyAsciiAsInteger)StaticscoreAsIntegerRandomizeIfKeyAscii=13ThenIfVal(txt1.Text)=rThen'计算成绩

score=score+1Elsescore=score-1EndIflbl6.Caption=Str(score)txt1.Text=""x=Int(n*Rnd):y=Int(n*Rnd)'生成下一个算式

lbl1.Caption=Str(x):lbl3.Caption=Str(y)

Ifopt=1Thenlbl2.Caption="+"r=x+yElselbl2.Caption="-"r=x-yEndIfEndIfEndSubPrivateSubquit_Click()EndEndSubPrivateSubcmd2_Click()EndEndSub

(1)菜单级别

VB可为每个下拉式菜单的菜单项创建不同级别的子菜单。在菜单编辑器中,以缩进量显示菜单项的级别。 由内缩符号表明菜单项所在的层次,每4个点表示一层,最多可以有20个点,即5个内缩符号,它后面的菜单项为第5层。如果一个菜单项前面没有内缩符号,则该菜单项称为第0层。程序运行时,选取0级菜单中的菜单项,显示1级子菜单的菜单项,显示2级子菜单……当选到没有子菜单的项目时,将执行事件过程。2.菜单项的控制

(2)菜单的访问键、快捷键和分隔条

当一个菜单被打开时,若可以用一个字键选取它的项目则这个键称为菜单项的访问键。设置访问键的方法非常简单,只要在这菜单项的标题中加入一个由“&”引导的字即可。 快捷键是指无需打开菜单就可以直接由键盘输入选择菜单项的按键。快捷键用于一些常用的菜单命令,以便在程序运行时快速选择。设置快捷键只需要在菜单编辑器的“快捷键”列表框中选取一个合适的快捷键便可。2.菜单项的控制

在设置过程中要注意和标准的Windows应用程序协调,避免使用系统已经定义的快捷键。例如,定义“保存”文件的菜单项快捷键为“Ctrl+S”,而不要定义为“Alt+F4”等。程序运行时,快捷键自动显示在菜单项标题的右端,不需要在标题中加入相应的文本内容。 在菜单中加入分隔条,可以有效地安排和划分菜单的功能,使得菜单更加条理化。在菜单中加入分隔条就是加入一个标题属性为“-”的菜单项。运行时,分隔条显示为一条贯穿菜单的横线。2.菜单项的控制

(3)菜单项的显示每个菜单项按不同的标准有多种显示方式。

a.菜单项的有效和无效2.菜单项的控制有效Enabled=True无效Enabled=False

(3)菜单项的显示

每个菜单项按不同的标准有多种显示方式。

a.菜单项的有效和无效

b.菜单项的可见和不可见

菜单项是否可见决定于它的Visible属性。当它取值为True时,菜单项可见;取值为False时,菜单项不可见。 当一个菜单项不可见时,其后的菜单项就会往上填充留下来的空位。一个菜单项不可见时,它的子菜单也不可见。另外,当一个菜单项不可见时,意味着它同时是无效的,不能用任何方法,包括快捷键选取它。2.菜单项的控制

(3)菜单项的显示每个菜单项按不同的标准有多种显示方式。

a.菜单项的有效和无效

b.菜单项的可见和不可见

c.菜单项的选定标志2.菜单项的控制

使用Checked属性,可在菜单项前添加一个复选标记“√”。通常这个标记可以起到这个标记可以起到两个作用:表示打开/关闭条件的状态,选取菜单命令可以交替地添加或删除复选标记;指示几个模式中哪一个或哪几个在起作用。

菜单控件数组就是在同一菜单上共享相同名称和事件过程的菜单项集合。菜单控件数组用于:

①在程序运行时要创建一个新的菜单项,它必须是菜单控件数组的成员

②简化代码--通用代码可被所有菜单控件数组元素,即每个菜单项使用。3.菜单控件数组

第个菜单控件数组元素都用惟一的索引值标记,该值由菜单编辑器上的“索引”输入框指定。当一个控件数组元素识别一个事件时,VB将Index的属性值作为一个附加参数传给事件过程。事件过程必须包含判断Index属性值的代码,因而可以确定正在使用哪个菜单项。 建立菜单控件数组的方法是:对同级菜单的各个菜单项赋以相同的名称,依次赋给索引值0~n-1。

注意:菜单控件数组的各元素在菜单控件列表框中必须是连续的,而且必须在同一个缩进级中。创建菜单控件数组时,要把分隔条也包括进去。

使用Load方法可在菜单控件数组中添加一个菜单项,使用UnLoad方法从菜单控件数组删去一个菜单项。3.菜单控件数组

弹出式菜单是独立于菜单栏而显示在窗体上的浮动菜单,它除了不显示0级菜单项目的标题之外,弹出式菜单的每个菜单项都可以有自己的子菜单,可以根据鼠标指针所处的屏幕位置不同而弹出不同的菜单。因此,弹出式菜单也被称为上下文菜单。在Windows应用程序中,通常使用鼠标右键激活上下文菜单。 定义弹出式菜单的方法与定义下拉菜单的方法一样,任何含有一个或一个以上的子菜单的菜单项都可作为弹出式菜单。4.弹出式菜单

激活弹出式菜单使用PopupMenu方法。格式:[<object>].PopuMenu<menuname>[,<flags>[,<x>[,<y>[,<boldcommand>]]]

其中<menuname>为菜单名,指定的菜单必须至少含有一个子菜;

<flags>是可选参数,为一个数值或常数,弹出式菜单的位置和行为;

<x>,<y>可选,显示弹出式菜单的坐标;

<boldcommand>可选参数,指定显示弹出式菜单中显示黑体正文标题的菜单控件名。4.弹出式菜单

例9-2

设计一个可以改变窗体背景颜色的弹出式菜单。PrivateSubForm_MouseUp(ButtonAs_Integer,ShiftAsInteger,XAs_Single,YAsSingle)IfButton=2ThenPopupMenumnucolor

EndIfEndSubPrivateSubmnublue_Click()BackColor=&HFF0000EndSubPrivateSubmnugreen_Click()BackColor=&HFF00&EndSubPrivateSubmnured_Click()BackColor=&HFF&EndSub(1)Flags参数 在PopupMenu方法中使用flags参数取不同的系统常数,可以进一步定义弹出式菜单的位置与性能。 位置常数和行为常数的描述请见本书第342页的表9-1和表9-24.弹出式菜单例9-3使用Flags参数。在例9-2中添加一按钮Command1和以下代码。PrivateSubCommand1_Click()

Dimxloc,ylocxloc=ScaleWidth/2yloc=ScaleHeight/2PopupMenumnucolor,vbpopumenucenter-Align_OrvbPopupMenuRightButton,xloc,ylocEndSub(2)

Boldcommand参数

boldcommand参数用来指定在显示的弹出式菜单中以粗体字体出现的菜单控件名称。在弹出式菜单中只能有一个菜单控件被加粗。例如:PopupMenumnucolor,vbPopuMenuCenterAlign_vbPopupMenuRightButton,xloc,yloc,mnured被加粗的菜单项是mnured。激活弹出菜单时,它的标题“红色”以粗体显示。4.弹出式菜单

多重窗体程序中,每个窗体都可以有自己的程序代码,完成不同的操作。利用多重窗体,可以设计较为复杂的多功能对话窗口,以取代由InputBox或MsgBox提供的标准对话框。9.2多重窗体1.Load语句 格式:Load<object> <object>是要加载的Form对象、MDIForm对象或控件数组元素的名称。

Load语句把一个窗体装入内存。执行Load语句后,可以引用窗体中的控件及各种属性,但此时窗体没有在屏幕上显示。2.UnLoad语句 格式:UnLoad<object>

该语句与Load语句的功能相反,从内存中卸载窗体或控件。9.2.1有关语句和方法3.Show方法 格式:{<object>.]Show[<style>] Show方法用来显示一个窗体。如果省略<object>,则显示当前窗体。参数<style>用来确定窗体的模式,可以取0或1。当模式值为1时,表示窗体是“模态型”窗体。在这种情况下,鼠标只在该窗体内起作用,不能到其他窗体操作,只有关闭该窗体后才能对其他窗体操作。当模式值为0时,表示窗体为“非模态型”窗体,可以对其他窗体操作。

Show方法兼有装入和显示窗体两种功能。也就是说,在执行Show时,如果窗体不在内存中,则Show自动把窗体装入内存,然后显示出来。9.2.1有关语句和方法4.Hide方法 格式:[<object>.]Hide Hide方法使窗体隐藏,即不在屏幕上显示,但仍在内存中。因此,它与UnLoad语句的作用是不同的。9.2.1有关语句和方法1.窗体切换多重窗体实际上是窗体集合。9.2.2多重窗体程序设计例9-4设计一个商场的客户服务系统,包括以下功能:

1、商品查询;

2、订购商品;

3、客户意见。设上述功能分别由3个窗体Form2,Form3和Form4的程序完成。为了将它们连接起来,首选定制一个启动窗体Form1,上面设置3个命令按钮,用于启动3个功能窗体。另外一个命令按钮用于结束程序。OptionExplicit'商品查询PrivateSubCommand1_Click()Form2.ShowForm1.HideEndSub'订购商品PrivateSubCommand2_Click()Form3.ShowForm1.HideEndSub窗体Form1的连接程序:'客户意见PrivateSubCommand3_Click()Form4.ShowForm1.HideEndSub'退出系统PrivateSubCommand4_Click()EndEndSub窗体Form1的连接程序:OptionExplicit'转向订购商品PrivateSubCommand1_Click()Form3.ShowForm2.HideEndSub'转向客户意见PrivateSubCommand2_Click()Form4.ShowForm2.HideEndSub'返回启动窗体PrivateSubCommand3_Click()Form1.ShowForm2.HideEndSub窗体Form2的连接程序:OptionExplicit'转向商品查询PrivateSubCommand1_Click()Form2.ShowForm3.HideEndSub'转向客户意见PrivateSubCommand2_Click()Form4.ShowForm3.HideEndSub'返回启动窗体PrivateSubCommand3_Click()Form1.ShowForm3.HideEndSub窗体Form3的连接程序:OptionExplicit'转向商品查询PrivateSubCommand1_Click()Form2.ShowForm4.HideEndSub'转向订购商品PrivateSubCommand2_Click()Form3.ShowForm4.HideEndSub'返回启动窗体PrivateSubCommand3_Click()Form1.ShowForm4.HideEndSub窗体Form4的连接程序:2.多重窗体程序的执行和保存(1)设置启动窗体 在单窗体程序中,系统别无选择,只能从一个窗体开始执行。多窗体工程究竟从哪个窗体开始执行?VB规定,对于多窗体程序,必须指定一个窗体为启动窗体。如果没有指,系统认为程序设计是第一个定制的窗体为启动窗体。

只有启动窗体在程序运行时才能自动显示出来,其他窗体必须通过Show方法才能看到。

如果想在应用程序启动时显示其他的窗体,就要改变启动窗体。方法如下:1、从“工程”菜单中选取“工程属性”2、选取“通用”3、在“启动对象”列表中选取新的启动窗体4、选取“确定”,完成操作。(2)使用启动程序 有时候程序启动时不加载任何窗体,而是首选执行一程序代码。例如可能先运行装入数据文件的代码,再根据数据文件的内容决定显示几个不同的窗体中的哪一个。若要做到这一点,可在标准模块中创建一个名为Main的子过程。例如:SubMain() DimintStatusAsInteger intStatus=GetUserStatus

‘调用一个函数来检验用户状态

IfintStatus=1Then

‘根据状态显示某个启动窗体

frmMain.Show Else frmPassword.Show EndIfEndSub

这个过程必须是一个子过程,而且不能在窗体棋局内。欲将SubMain过程设为启动对象,可将”启动对象“选定为”SubMain”。(3)封面显示

封面作为工程的包装,通常显示诸如应用程序名、版权信息或简单的位图等内容。 封面的另一作用是“快速显示”。如果启动应用程序需要较长的执行时间,例如要从数据库中装入大量数据或者装入一些大型位图,就可能希望启动时在屏幕上显示一些信息,吸引用户的注意,造成应用程序装载很快的错觉。这就是所谓的“快速显示”窗体。启动VB时所显示的屏幕就是一个快速显示。

封面窗体显示完后,一般不另设计事件过程切换主窗体。而是直接卸载封面窗体,显示主窗体。此时要用SubMain过程作为启动对象,且用Show方法显示封面窗体。PrivateSubMain()frmSplash.Show‘显示“快速显示”窗体‘在此处添加启动过程frmMain.Show‘显示主窗体UnloadfrmSplash‘制裁“快速显示”窗体EndSub

封面窗体设计尽是要求简单。如果使用大量位图或者大量控件,则封面显示本身装入将会变慢。(4)结束应用程序 应用程序结束时,就卸载所有窗体。如果仍有隐藏窗体存在,那么应用程序可能仍在继续运行,直到所有隐藏窗体都关闭为止。使用End语句结束应用程序,系统自动卸载所有工程中的窗体。(5)多窗体程序存取

从文件菜单选取“保存工程”或“工程另存为”命令,系统弹出对话框,提示用户保存工程的各个文件,当用文件菜单的“打开工程”命令打开工程时,系统将自动装载工程的全部文件。9.3.1界面形式9.3.2

VB的MDI窗体9.3.3与MDI有关的属性、事件和方法9.3.4

建立MDI应用程序9.3多重文档界面(MDI) Windows用户界面主要有两种形式:单文档界面(SDI)和多文档界面(MDI)。9.3.1界面形式SDI9.3.1界面形式MDI

多重文档界面允许创建在单个容器窗体中包含多个窗体的应用程序。MDI应用程序由一个父窗体和若干个子窗体组成,可以同时显示多个文档,每个文档都在自己的窗口中显示。文档的子窗口被包含在父窗口中,父窗口为应用程序中所有的子窗口提供工作空间。 当父窗口最小化时,所有的文档子窗口也被最小化。每个子窗口都有有自己的图标,但只有父窗口的图标显示在任务栏中。 子窗口可用不同的方式排列,它们之间没有约束关系。9.3.2VB的MDI窗体

一个应用程序只能定义一个MDI父窗体,这个窗体可以有多个MDI子窗体。

MDI窗体只能包含Menu和PictureBox控件、具有Align属性的自定义控件,或者具有不可见界面(如Timer)的控件。为把其他控件放入MDI窗体,可以窗体上设置一个图片框,然后在图片框中放置其他控件。

MDI窗体本身不能用Print方法显示文本。

在运行时,MDI窗体及其所有的子窗体有如下5个告别显示特征。①所有子窗体均显示在MDI窗体的工作空间内。像其他的窗体一样,用户能够移动子窗体和改变子窗体的大小,不过它们被限制于MDI窗体内。②当最小化一个子窗体时,它的图标将显示于MDI窗体上而不是在任务栏中。③当最大化一个子窗体时,它的标题会与MDI窗体的标题组合在一起,显示于MDI窗体的标题栏上。④能过设定AutoShowChildren属性,子窗体可在窗体加载时自动显示(True)或自动隐藏(False)。⑤活动子窗体的菜单将显示在MDI窗体的菜单栏中,而不是显示在子窗体中。 MDI应用程序所使用的属性、事件和方法与单一窗体没有区别,但增加了专门用于MDI的属性、事件和方法,包括MDIChild属性、Arrange方法以及QueryUnload事件等。9.3.3与MDI有关的属性、事件和方法1.MDIChile属性 如果一个窗体的MDIChild属性被高为True,则该窗体将作为MDI父窗体的子窗体,MDIChild属性默认值为False。

窗体的MDIChild属性只能通过属性窗口设置,不能在程序代码中设置。设置该属性之前,必须首选定义MDI窗体,具体方法见后面。2.Arrange方法

Arrange方法以不同的方式排列MDI中的窗体或图标,其格式为:

<object>.Arrange<arrangement> <object>为重新排列的MDI窗体的名字,该窗体内含有子窗体或图标;

<arrangement>一个整数值,用来指定MDI窗体中子窗体或图标的排列方式符号常量值描述vbNormal0默认值,正常,可被其他窗口框住vbMinimized1最小化,最小化为一个图标vbMaximized2最大化,扩大到最大尺寸Arrage方法的方式设置值3.QueryUnload事件 当关闭一个MDI窗体时,QueryUnload事件首先在MDI父窗体发生,然后在所有子窗体中发生。如果没有窗体取消QueryUnload事件,则Unload事件首先发生在其他所有窗体中,然后再发生在MDI窗体中。 此事件过程的用途是在关闭一个应用程序,确保每个窗体中没有未完成的任务。例如,某窗体中还没未保存的新数据,则应询问用户是否存盘。一个简单的QueryUnload事件过程如下:PrivateSubMDIForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger) DimMsg Msg=“你真的要退出应用吗?“

IfMsgBox(Msg,vbQuestion+vbYesNo,_ Me.Caption)=vbNoThenCencel=TrueEndSub4.Dim语句 在MDI应用中,用Dim语句可以添加MDI子窗体,其格式为:

Dim<object>[([<lower>To]<upper>)]As[New]<object|<type>

这种形式的Dim语句用来声明图形对象,包括窗体和控件。<object>是已经存在的窗体或控件名,<type>为对象类型。如是省略修饰词New,则可通过代码改变新对象的属性设置。

Dim语句只是用来声明图形对象,声明后的对象处于“虚状态”,只有执行Set,Load有Show指令后对象才处于“实状态”。例如:DimNewChildAsForm1NewChild.Show

第一个语句把NewChild声明为一个子窗体,只有执行第二个语句NewChlid.Show之后才能显示这个子窗体。

Dim语句可以声明一个子窗体,也可以声明一个对象数组。格式中的可选部分([<lower>To]<uper>)

用来声明对象数组,包括子窗体数组。5.WindowState属性

WindowState属性用来设置窗口的操作状态,可以通过属性窗口或程序代码设定。符号常量值描述vbNormal0默认值,正常,可被其他窗口框挡住vbMinimized1最小化,最小化为一个图标vbMaximized2最大化,扩大到最大尺寸

编写MDI应用程序之前,必须半自动化创建MDI窗体。建立MDI应用程序的一般步骤如下:1、创建MDI窗体2、创建应用程序的子窗体3、编写程序代码9.3.4建立MDI应用程序例9-5建立一个MDI窗体和3个窗体,以不同的排列方式显示子窗体。 ①建立一个MDI窗体。启动VB,执行“工程”菜单的“添加MDI窗体”命令,即可建立名为MDIForm1的窗体。此时工程管理窗口有Form1和MDIForm1两个窗体。

②建立子窗体。单击工程窗口中的Form1,把它的MDIForm1属性设为True,使它成为MDI窗体的子窗体。执行“工程”菜单的“添加窗体命令,建立两个新的窗体Form2和Form3,把它们的MDIChild属性设为True,使它们成为MDI窗体的子窗体。此时工程管理窗口中的工程1已经有了4个窗体。 ③指定启动窗体。用前面介绍的方法把MDI窗体设为启动窗体。

④设置MDI窗体的控制区。双击工程窗口中的MDIForm1,使它成为当前窗口。

⑤建立命令按钮。 具体各控件属性值请见课本356页。MDIForm1窗体代码:OptionExplicitPrivateSubMDIForm_Load()Form1.ShowForm2.ShowForm3.ShowEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubCommand1_Click()DimpAsIntegerp=InputBox(“排列方式选择,输入一个数值:_(0~3)")SelectCasepCase0MDIForm1.Arrange0Case1MDIForm1.Arrange1Case2MDIForm1.Arrange2Case3MDIForm1.Arrange3EndSelectEndSubForm1窗体代码:OptionExplicitPrivateSubCommand1_Click()BackColor=&HFFFFC0FontSize=16Print"

温馨提示

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

评论

0/150

提交评论