高级编程VB的菜单设计菜单的设计MDI菜单的设计控件组打开文件窗体的启动和卸载状态栏、工具栏、鼠标事件、绘制图形(略,参看实验指导书)VB的菜单设计教学目的:使学生掌握VB的菜单设计方法;能够正确设计VB的菜单。教学内容:菜单的设计MDI菜单的设计小结上机练习及作业菜单的设计1.菜单的作用2.菜单的设计3.菜单设计步骤4.对该菜单的操作:点击事件挂某窗体5.菜单项增减6.弹出式菜单1。菜单的作用菜单是应用程序的人机对话界面,反映了系统功能的层次结构。菜单用于给命令进行分组,使用户能够更方便、更直观地访问这些命令。用户在运行环境下通过对菜单功能条的点击来实现选择各种功能或操作。2。菜单的设计VB提供可以非常方便地在应用程序的窗体上建立菜单的功能。在设计状态,选择“工具”菜单下的“菜单编辑器(CTRL+E)”命令;或者在窗体上单击右键,在随后弹出的快捷菜单中选择“菜单编辑器”命令,出现菜单设计窗口,菜单编辑器的结构主要属性(数据区、编辑区中)菜单编辑器的结构数据区:用于定义菜单对象的属性值编辑区:对各种菜单项的位置进行调整和编辑(增、删菜单条、子、父条的编辑器)显示区:显示菜单功能条的属性结构。主要属性(数据区中)1)标题(Caption)文本框:外部名2)名称(Name)文本框:内部名3)索引(Index):确定控件在控件数组中的位置。该位置与控件的屏幕位置无关。4)快捷键(Shortcut)下拉列表框:5)帮助上下文ID:在HelpFile属性指定的帮助文件中用该数值查找适当的帮助主题。6)复选(Checked)检查框:设置复选标记。通常用它来指出切换选项的开关状态,比如:文本文件中的菜单“格式”中的“自动换行”7)有效(Enabled)检查框:8)可见(Visible)检查框:9)显示窗口列表:主要属性(编辑区中)下一个(Next)按钮插入(Insert)按钮删除(Delete)按钮←和→按钮↑和↓按钮3。菜单设计步骤:1*打开Form,点击菜单工具,进入菜单编辑器2*头菜单的生成:键入标题:A1;键入名称(Name):Name1;其它属性按下Next定义A2,Name2A3,Name33*子菜单的生成:以做A1的子菜单例在显示区点击A2;点击插入;点击(表子菜单);定义相应的Caption和Name4*菜单隔线的加入:菜单隔线也可被菜单条进行定义,但其Caption=“—”(减号)即可。4。对菜单的操作:菜单中的每一菜单项都相当一个按钮控件可以对其进行点击操作;对某个菜单项的Click()事件中编写程序:窗体名.show。5.菜单项增减应用程序的菜单应设计成能够在执行时随着程序的变化动态地增减菜单中的菜单项。菜单项增减是利用控件数组来实现的。6。弹出式菜单:设计快捷菜单仍然使用VB提供的菜单编辑器,只要把某个菜单所在的窗体属性(Visible)设置成隐藏(False)就可以了;然后使用方法来调用。不管是在窗口顶部某单条上显示的菜单,还是隐藏的菜单,都可以用PopupMenu方法把它们作为快捷菜单在程序运行期间显示出来。使用形式如下:[对象.]PopupMenu菜单名,标志,x,yx,y:是快捷菜单显示的位置。标志:指定快捷菜单的行为。当标志为0时,快捷菜单中的项只能对鼠标左键起反应。当标志为1时,快捷菜单中的项对鼠标左键和右键都反应;标志为2时PopupMenu方法只能用在Mousedown事件过程。例如:PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2Then'检查是否单击了鼠标右键。PopupMenumnuFileEndIfEndSub直到菜单中被选取一项或者取消这个菜单时,调用PopupMenu方法后面的代码才会运行。MDI的设计1.MDI概念2.MDI结构及其特点3.MDI创建4.MDI窗体的显示属性5.MDI父、子窗体的加载6.多个子窗体的快捷创建法7.对子窗体的跟踪8.示例:菜单设计程序1.MDI概念MDI是Windows环境下的应用程序提供了一次打开多个窗体的管理功能。其中一个称为父窗口,而另外有类似功能或关联的窗体称为子窗口。MDI管理功能可以利用鼠标点击实现不同文档之间的切换,达到同时浏览及比较多个窗口内容的功能,使各窗体之间数据交换更方便。VB提供了两种对多个窗体的管理机制:多重窗体和多文档窗体:多重窗体:若多个窗体是相互独立的,每个窗体均有各自的特征和功能,并常将这些窗体分别挂在不同的功能条上,称它们为多重窗体。多文档窗体:有父子结构的窗体,称为多文档窗体。2.MDI结构及其特点结构:多窗口之间是二层层次结构。特点:父窗口只有一个;子窗口可以有多个,子窗口之间有关联;父窗口中不含任何控件,但可以有自己的菜单;子窗口只能在父窗口内活动,可以有控件设计其功能。3.MDI创建需要创建MDI的父窗体和MDI的子窗体,生成和使用步骤如下:父窗口的创建:工程/添加MDI窗体。子窗口的创建:工程/添加窗体,设置子窗体属性:Mdichildren=true。Caption=“MDIChildForm”此时,VB自动将父子窗体进行联接。继续创建更多的子窗体4.MDI窗体的属性arrange=0—子窗口层叠排列;1—子窗口水平排列;2—子窗口垂直排列;3—子窗口极小化符号。5.MDI父、子窗体的加载.打开子窗体时,其父窗体会自动打开,并显示子窗体的菜单.打开父窗体时,其子窗体不会自动打开,而需要用Form.show命令打开6.多个子窗体的快捷创建法创建MDIFORM;创建Form1,设置其MDIChild=True在MDIFORM的强制说明下,写入语句:Dimforms(10)asnew子窗体名。7.对子窗体的跟踪定义:是指利用程序跟踪确定被击活的窗体。方法:使用代词。对窗体而言,使用tag属性用以标记被激活的窗体的下标号。代词me表示被击活的Form,再需要给子窗体一个索引号,并将其索引号放置在Tag属性中。Forms(i).Tag=i(i=0,1,2,…,9)8.菜单设计程序实例对MDI菜单写程序:首先定义Form1窗体的8个窗体实例DimForms(7)AsNewForm1为form主菜单中的OpenForm和CloseForm菜单项编程:打开/关闭8个子窗体,并为8个子窗体着不同的颜色,给不同的标题。为Windows主菜单的四个功能条写程序:安排子窗口排列方式。并显示窗口列表。为子窗体写程序:实现光标跟踪第一步:设计MDI窗体Form:openform,closeform.Windows:cascade,titlever,titlehorexit:‘MDI窗体编写代码DimnAsIntegerDimForm(10)AsNewForm1PrivateSubMDIForm_Load()‘父窗体加载n=8EndSubPrivateSubncloseform_Click()‘关闭窗体DimkAsIntegerFork=0Ton-1UnloadForm(k)NextEndSubPrivateSubnopenform_Click()DimkAsIntegerFork=0Ton–1‘n是窗体级变量Form(k).ShowForm(k).BackColor=(Rnd(k)*1000+k*k)Form(k).Caption=form&kForm(k).Tag=kNextkEndSubPrivateSubnexit_Click()End‘强制退出。Unloadme,需要Unload事件EndSubPrivateSubw1_Click()MDIForm1.Arrange2EndSub第二步:子窗体上写程序PrivateSubForm_GetFocus()Me.caption=”Forms(”&Form(me.tag)&“)I’vebeenactivated!”EndSubPrivateSubForm_LostFocus()Me.caption=”Forms”&Form(me.tag)EndSub运行子窗口:Project\Properties\StartObject选MDIForm使用控件数组控件组的定义控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。同一控件数组中的元素有自己的属性设置值。常见的控件数组的用处包括实现菜单控件和选项按钮分组。为何使用控件数组所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。若要在运行时创建新控件,则新控件必须是控件数组的成员。使用控件数组时,每个新成员继承数组的公共事件过程。没有控件数组机制是不可能在运行时创建新控件的,因为全新控件不具有任何事件过程。示例应用程序:Calc.vbp如果安装了示例应用程序,则可在主VisualBasic目录(VB\Samples\Pguide)的子目录\Calc下找到此应用程序。使用控件数组在运行时,可用Load和Unload语句添加和删除控件数组中的控件,使用如下语法:Loadobject(index%)Unloadobject(index%)object在控件数组中添加或删除的控件名称。index%控件在数组中的索引值。加载控件数组的新元素时,大多数属性设置值将由数组中具有最小下标的现有元素复制。不会自动把Visible、Index和TabIndex属性设置值复制到控件数组的新元素中,所以,为了使新添加的控件可见,必须将其Visible属性设置为True。使用控件数组整型注意:试图对数组中已存在的索引值使用Load语句时,VB将生成一个错误。重点:可用Unload语句删除所有由Load语句创建的控件,然而,Unload无法删除设计时创建的控件,无论它们是否是控件数组的一部分。使用控件数组PrivateSubForm_Paint()StaticFlagFormPaintedAsInteger'当第一次画窗体时,IfFlagFormPaintedTrueThenFori=1To5LoadOption1(i)'给数组添加5个选项按钮。Option1(i).Top=Option1(i-1).Top+350Option1(i).Visible=TrueNextiOption1(0).Caption=Open'在每个选项按钮上放置标题。Option1(1).Caption=SaveOption1(2).Caption=ColorOption1(3).Caption=FontOption1(4).Caption=PrinterOption1(5).Caption=HelpCommand1.Caption=ShowDlg'标签命令按钮。FlagFormPainted=True'窗体已画完。EndIfEndSubPrivateSubCommand1_Click()‘单击显示按钮,IfOption1(0).ValueThen'如果选择打开,CommonDialog1.ShowOpen'显示打开公共对话框。ElseIfOption1(1).ValueThen‘否则选择保存,CommonDialog1.ShowSave'显示Save公共对话框。ElseIfOption1(2).ValueThen‘否则选择颜色,CommonDialog1.ShowColor'显示Color公共对话框。ElseIfOption1(3).ValueThen‘否则选择字体,CommonDialog1.Flags=cdlCFBoth‘在使用ShowFont方法之前,必须给cdlCFBoth,cdlCFPrinterFonts,或cdlCFScreenFonts置标识属性。CommonDialog1.Sho