应用程序界面设计.ppt
应用程序界面设计应用程序界面设计2创建通用过程创建通用过程(1)使用)使用“添加过程添加过程”对话对话 单击单击“工具工具”菜单中的菜单中的“添添加过程加过程”命令,打开命令,打开“添加过添加过程程”对话框。对话框。(2)在代码编辑窗口中输入)在代码编辑窗口中输入Private|Public Static Sub 子过程名(参数表)子过程名(参数表)语句块语句块 Exit SubEnd Sub说说明明:VB默默认认的的过过程程是是Public,表表示示在在应应用用程程序序中中随随处处都都可可调调用用它它们们;如如用用Private,则则只只有有该过程所在模块中的程序才能调用。该过程所在模块中的程序才能调用。注意函数过程一般应有:注意函数过程一般应有:函数过程名函数过程名=表达式表达式3调用子过程调用子过程(SUB过程)(1)使用)使用Call语句:语句:Call (2)直接使用过程名:)直接使用过程名:说明:说明:用用Call语句调用时,其过程名后必须加括号。语句调用时,其过程名后必须加括号。若省略若省略Call,则过程名后不能加括号,则过程名后不能加括号例如例如,下面两个语句都能调用,下面两个语句都能调用jiech子过程:子过程:Call Jiech(20)Jiech 204调用函数过程调用函数过程(Function过程)过程)(1)直接使用过程名:)直接使用过程名:(2)使用)使用Call语句:语句:Call 说明:说明:调用有实参时,其过程名后必须加括号。调用有实参时,其过程名后必须加括号。例如例如:Jiech(20)Call Jiech(20)子过程不加括号子过程不加括号调用方法:调用方法:Print pri(3)无参函数的调用:)无参函数的调用:如:如:Function pri pri=”ASDFJKL”End Function5函数过程使用示例函数过程使用示例例1(8-3)设计应用程序,使用设计应用程序,使用两种两种过程计过程计算整数算整数1n中奇数的阶乘的和中奇数的阶乘的和。(vb81L8-3)Public Function qjc(p)m=1 For j=1 To p m=m*j Next j qjc=mEnd FunctionPublic Sub qjc(p,m)m=1 For j=1 To p m=m*j Next jEnd Sub主程序:主程序:将文本框内容赋将文本框内容赋n 循环调函数求阶乘和循环调函数求阶乘和输出阶乘值输出阶乘值Private Sub Command1_Click()Dim i%,n%Dim s As Long n=Val(Text1.Text)s=0For i=1 To n Step 2 s=s+qjc(i)Next i Label3.Caption=sEnd SubPrivate Sub Command1_Click()Dim i%,n%Dim t As Long,s As Longn=Val(Text1.Text)s=0For i=1 To n Step 2 Call qjc(i,t)s=s+tNext i Label3.Caption=sEnd Sub*6.*6.子过程与函数过程区别子过程与函数过程区别(1)函数过程:有返回值函数过程:有返回值,有类型有类型,在函数体内至在函数体内至少赋值一次;少赋值一次;子过程无返回值子过程无返回值,无类型,过程体内不能对过无类型,过程体内不能对过程名赋值程名赋值;(2)调用时,子过程调用是一句独立的语句。调用时,子过程调用是一句独立的语句。函数过程不能作为单独语句调用,必参与表函数过程不能作为单独语句调用,必参与表达式运算。达式运算。(3)*一般当过程有一个函数值,使用函数过程一般当过程有一个函数值,使用函数过程较直观;反之较直观;反之,若过程若过程无返回值无返回值或有或有多个返回多个返回值值,使用子过程。,使用子过程。注意:注意:子过程的返回值是靠参数的传递实现的子过程的返回值是靠参数的传递实现的四、模块结构 子过程(子过程(Sub)标准模块(标准模块(.bas)类模块(类模块(.cls)子过程(子过程(Sub)窗体模块(窗体模块(.frm)函数过程(函数过程(Function)事件过程事件过程VB应用程应用程序(序(.vbp)函数过程函数过程(Function)1窗体模块窗体模块 每个窗体对应一个窗体模块,窗体模块包括窗体及其控每个窗体对应一个窗体模块,窗体模块包括窗体及其控件的属性设置、窗体变量的说明、事件过程、通用过程等。件的属性设置、窗体变量的说明、事件过程、通用过程等。2标准模块标准模块 可可包包含含公公有有或或模模块块级级的的变变量量、常常数数、类类型型,外外部部过过程程和和全全局局过过程程的的全全局局声声明明或或模模块块级级声声明明。默默认认时时,标标准准模模块块中中的的代代码是公有的码是公有的;它保存在它保存在.bas的文件中。的文件中。3类类模模块块 用用户户可可以以在在类类模模块块中中编编写写代代码码建建立立新新对对象象,这这些些新对象可以包含自定义属性和方法,新对象可以包含自定义属性和方法,五、变量与过程的作用域五、变量与过程的作用域1变量的作用域变量的作用域 变量的作用域是指变量的作用范围。变量的作用域是指变量的作用范围。作用范围 局部变量 窗体/模块级变量 全局变量 声明方式声明方式 Dim,Static Dim,Private Public 声明位置声明位置 过程之中过程之中 窗体窗体/模块通用段模块通用段 窗体窗体/模块通用段模块通用段 能否被本窗体能否被本窗体/模模 块其他过程访问块其他过程访问能否被其他能否被其他 模块访问模块访问(1)局部变量:局部变量:在过程内用在过程内用Dim声明的变量,声明的变量,只可本过程用。只可本过程用。(2)窗体窗体/模块级模块级:在窗体:在窗体/模块任何过程外模块任何过程外定义定义,即在即在“通用声明通用声明”段用段用Dim或或Private声明声明,只本窗体或模块中的过程只本窗体或模块中的过程使用。使用。(3)全局级:全局级:在在“通用声明通用声明”段用段用Public语句语句声明的变量,可供该应用程序所有过程声明的变量,可供该应用程序所有过程或函数使用或函数使用。例如在下面一个窗体或标准模块文件例如在下面一个窗体或标准模块文件中不同级的变量声明:中不同级的变量声明:Public Pa As integerPrivate Mb As string*10 Private Sub F1()Dim Fa As integer End Sub Private Sub F2()Dim Fb As Single End Sub全局变量全局变量窗体窗体/模块级变量模块级变量局部变量局部变量局部变量局部变量在讲复制、剪切时,为什么将在讲复制、剪切时,为什么将st设为窗体级变量?(见设为窗体级变量?(见P188)2。变量的生存期。变量的生存期 根根据据变变量量在在程程序序运运行行期期间间的的生生命命周周期期,变量可分为动态变量和静态变量变量可分为动态变量和静态变量。动态变量(动态变量(Dynamic)指指程程序序运运行行到到变变量量所所在在的的过过程程时时,才才分分配配该该变变量量的的内内存存单单元元;退退出出该该过过程程后后,该该单单元元自自动动释释放放,其其值值消消失失。使使用用Dim语语句句在在过过程程中中声声明明的的局部变量属于动态变量。局部变量属于动态变量。静态变量(静态变量(Static)指指程程序序运运行行到到该该变变量量所所在在的的过过程程,退退出出该该过过程程,其其值仍被保留。值仍被保留。使用使用Static语句在过程中声明的局部变量属于语句在过程中声明的局部变量属于静态变量。静态变量。例例2(8-6)设计一个模拟幸运数字机游戏。设计一个模拟幸运数字机游戏。设幸运数字为设幸运数字为8,每次由计算机随机产生三,每次由计算机随机产生三个个010之间的随机数,当这三个随机数中之间的随机数,当这三个随机数中有一个数字为有一个数字为8时,就算赢了一次。要求利时,就算赢了一次。要求利用全局变量来累计获胜次数用全局变量来累计获胜次数。(vb81L8-6)Private Sub Form_Load()RandomizeEnd Sub初始化随机数初始化随机数Public n,wPrivate Sub Command1_Click()Label1.Caption=Int(Rnd*10)产生随机数产生随机数Label2.Caption=Int(Rnd*10)产生随机数产生随机数Label3.Caption=Int(Rnd*10)产生随机数产生随机数 n=n+1 累计产生随机数的次数累计产生随机数的次数If(Label1.Caption=8)Or(Label2.Caption=8)Or(Label3.Caption=8)Then Beep w=w+1 使用全局变量使用全局变量,累计获胜的次数累计获胜的次数 Label4.Caption=共产生了共产生了&n&次随机数次随机数,你赢了,你赢了&Str(w)&次。次。End IfEnd Sub若若n,w不设为全局变量,不设为全局变量,而是局部变量结果如何而是局部变量结果如何?n与与w始始终为终为1局部变量声明:局部变量声明:Dim声明声明:随过程的调用而分配存贮单元,随过程的调用而分配存贮单元,变量的初始化;过程体结束,变量的内容变量的初始化;过程体结束,变量的内容自动消失,存贮单元释放。自动消失,存贮单元释放。Static声明声明:每次调用过程,变量保持原来的值。每次调用过程,变量保持原来的值。声明形式:声明形式:Static 变量名变量名 AS 类型类型 Static Function 函数过程名函数过程名(参数列表参数列表)As 类型类型 Static Sub 子过程名子过程名(参数列表参数列表)过程名前加过程名前加Static,表示该过程内的局部变量都是,表示该过程内的局部变量都是静态变量静态变量。例例3(vb81L2)Private Sub Form_Click()运行结果:运行结果:Dim i%,isum%For i=1 To 5 isum=sum(i)Print isum,Next i End Sub 1 3 6 10 15问:若将问:若将Static j As Integer改改为为 Dim j As Integer,结果?,结果?1 2 3 4 5Private Function sum(n As Integer)Static j As Integer j=j+n sum=jEnd Function例例4窗体窗体/模块级变量示例。模块级变量示例。Dim x As Integer,y As Integer,z As IntegerPrivate Sub Form_Activate()x=10:y=20PrintPrint,x“,y“,z=x+yPrintPrint“调用前值调用前值”,x,y,zPrintCall testPrint “调用后值调用后值”,x,y,zPrintEnd SubPublic Sub test()z=x+yPrint“过程值过程值”,x,y,zPrintEnd Sub程序运行结果程序运行结果?x y z=x+y调用前值调用前值 10 20 0过程值过程值 10 20 30调用后值调用后值 10 20 30例例5窗体窗体/模块级变量示例。模块级变量示例。Private Sub Form_Activate()Dim x As Integer,y As Integer,z As Integerx=10:y=20PrintPrint,x“,y“,z=x+yPrintPrint“调用前值调用前值”,x,y,zPrintCall testPrint “调用后值调用后值”,x,y,zPrintEnd SubPublic Sub test()z=x+yPrint“过程值过程值”,x,y,zPrintEnd Sub程序运行结果程序运行结果?x y z=x+y调用前值调用前值 10 20 0过程值过程值 0 0 0调用后值调用后值 10 20 0传址传址(双向传递):双向传递):形参得到的是实参的地址,形参得到的是实参的地址,当形参值的改变同时也改变实参的值。当形参值的改变同时也改变实参的值。默认传址。默认传址。传值(单向传递)传值(单向传递):形参得到的是实参的值,形参得到的是实参的值,形参值的改变不会影响实参的值。形参值的改变不会影响实参的值。使用使用ByVal表示传值。表示传值。三、三、参参数传递:数传递:指主调过程的实参传递给被调过程的形参指主调过程的实参传递给被调过程的形参。Sub Swap1(ByVal x%,ByVal y%)Sub Swap1(x%,y%)Public Sub qjc(p,m)例例6.两个变量的交换两个变量的交换(vb81L6)Sub Swap1(ByVal x%,ByVal y%)t=x:x=y:y=tEnd SubPrivate Sub Command1_Click()a=10:b=20:Swap1 a,b 传值传值Print A1=;a,B1=;b a=10:b=20:Swap2 a,b 传地址传地址 Print A2=;a,B2=;bnd SubSub Swap2(x%,y%)t=x:x=y:y=tEnd Sub默认为:默认为:Public运行运行结果:结果:A1=10 B1=20A2=20 B2=102过程的作用域过程的作用域 VB中过程的作用域分为模块级和全局级。中过程的作用域分为模块级和全局级。(1)模块级过程)模块级过程 某个模块内定义的过程,其作用域为本模块。某个模块内定义的过程,其作用域为本模块。定定义义方方法法:在在Sub或或Function前前加加关关键键字字Private,这这样该过程只能被在本模块中定义的过程调用。样该过程只能被在本模块中定义的过程调用。(2)全局级过程)全局级过程 全全局局级级过过程程可可被被整整个个应应用用程程序序(工工程程)所所有有模模块块中定义的过程调用,其作用域为整个应用程序。中定义的过程调用,其作用域为整个应用程序。定定义义方方法法是是:在在Sub或或Fuction前前加加关关键键字字Public(可以默认)。(可以默认)。上机作业:上机作业:1.编程,通过查找子过程查找数组编程,通过查找子过程查找数组a(10)中任中任意元素的位置,若没找到,给出信息。意元素的位置,若没找到,给出信息。a(10)为为2,5,4,8,12,9,1,25,16,3 2。P57 4章章 实验四的实验题目实验四的实验题目3。P66 5章章 实验一的四、实验题目实验一的四、实验题目4。上册上册 P231 例例7-7 复 习(1)局部变量:局部变量:在过程内用在过程内用Dim声明的变量,声明的变量,只可本过程用;在过程内用只可本过程用;在过程内用Static声明的声明的变量为变量为静态静态局部变量。局部变量。(2)窗体窗体/模块级模块级:在窗体:在窗体/模块任何过程外定模块任何过程外定义义,即在即在“通用声明通用声明”段用段用Dim或或Private声声明明,只本窗体或模块中的过程使用。只本窗体或模块中的过程使用。(3)全局级:全局级:在在“通用声明通用声明”段用段用Public语句语句声明的变量,可供该应用程序所有过程或声明的变量,可供该应用程序所有过程或函数使用函数使用。1。变量分几种?如何定义?其作用范围是。变量分几种?如何定义?其作用范围是什么?什么?2。在下面一个窗体或标准模块文件中不同在下面一个窗体或标准模块文件中不同级的变量声明:级的变量声明:Public Pa As integerPrivate Mb As string*10 Private Sub F1()Dim Fa As integer End Sub Private Sub F2()Static Fb As Single End Sub全局变量全局变量窗体窗体/模块级变量模块级变量局部变量局部变量静态局部变量静态局部变量8.2 公共对话框公共对话框(CommonDialog)工程工程/部件部件 选定选定 部部件标签件标签选定选定Microsoft CommDialog Control 6.0确定确定1。添加添加公共(通用)对话框公共(通用)对话框到工具箱到工具箱2。打开公共对话框:。打开公共对话框:属性属性(1)Action:打开通用对话框。:打开通用对话框。(2)DialogTiltle:通用对话框标题。(有:通用对话框标题。(有默认,也可自己设默认,也可自己设)。(3)CancelError True:选择:选择“取消取消”按钮,出现错误警告;按钮,出现错误警告;Err.Number置为置为32755(cdCancel)。False(缺省缺省):选择:选择“取消取消”按钮,没有错误按钮,没有错误警告。警告。属性:属性:FileName:包含路径包含路径 FileTitle:该属性设计时无效:该属性设计时无效,返回文件名返回文件名(不包含路径不包含路径)Filter:用于过滤文件类型,格式:用于过滤文件类型,格式:文件说明文件说明|文件类型文件类型 例如:例如:Word文档文档(*.Doc)|*.DOC|文本文件文本文件(*.TXT)|*.txt|所有文件所有文件|*.*FilterIndex:文件类型列表框中显示第几组类型文件。从文件类型列表框中显示第几组类型文件。从1开始。开始。InitDir:指定打开对话框的初始目录,默认当前目录。指定打开对话框的初始目录,默认当前目录。2.“2.“打开打开”文件对话框文件对话框DialogTiltleFileName InitDirFilterFilterIndexDefaultExt例例1(8-9)这是一个使用公共对话框控件的例子这是一个使用公共对话框控件的例子。(vb82l8-9)CommonDialog1.InitDir=c:“CommonDialog1.Filter=all files|*.*|(*.exe)|*.exeCommonDialog1.FilterIndex=1CommonDialog1.Action=1Text1.Text=CommonDialog1.FileNameShowOpen用控件数组设用控件数组设置命令按钮置命令按钮Private Sub Command1_Click(Index As Integer)n=IndexSelect Case nCase 0 实现实现打开打开对话框的操作对话框的操作CommonDialog1.Filter=all files|*.*|(*.exe)|*.exeCommonDialog1.FilterIndex=1CommonDialog1.ShowOpenText1.Text=CommonDialog1.FileNameFrame1.Caption=从打开对话框返回从打开对话框返回Action=13.“3.“另存为另存为”对话框对话框 属性属性:与与“打开打开”对话框类似。对话框类似。DefaultExt:所存文件的缺省扩展名。所存文件的缺省扩展名。4.“4.“颜色颜色”对话框对话框 属性属性Color:返回或设置选定的颜色。返回或设置选定的颜色。例例1中中“颜色颜色”按钮的事件过程按钮的事件过程 如:如:CommonDialog1.ShowColor Text1.ForeColor=CommonDialog1.ColorCase 1 实现实现另存为另存为对话框的操作对话框的操作CommonDialog1.DefaultExt=txtCommonDialog1.Filter=all files|*.*|文本文件文本文件|*.txt|CommonDialog1.FilterIndex=2CommonDialog1.ShowSaveText1.Text=CommonDialog1.FileNameFrame1.Caption=从另存为对话框返回从另存为对话框返回Case 2 实现实现颜色颜色对话框的操作对话框的操作CommonDialog1.ShowColorText1.Text=文本颜色的改变文本颜色的改变Text1.ForeColor=CommonDialog1.ColorFrame1.Caption=从颜色对话框返回从颜色对话框返回Action=3 FontName FontBold,FontItalicFontSize FontStrikethruFontUnderline Color5.“5.“字体字体”对话框对话框5.“5.“字体字体”对话框对话框Flags属性:属性:指示所显示的字体类型,指示所显示的字体类型,必须设置必须设置。cdlCFScreenFonts&H1或或1 屏幕字体屏幕字体 cdlCFPrinterFonts&H2或或2 打印机字体打印机字体 cdlCFBoth&H3或或3 打印机字体和屏幕字体。打印机字体和屏幕字体。cdlCFEffects&H100或或256 显示删除线和下划线显示删除线和下划线 检查框及颜色组合框检查框及颜色组合框“字体字体.”按钮的事件过程按钮的事件过程CommonDialog1.Flags=cdlCFEffects Or cdlCFBoth或或 CommonDialog1.Flags=259 3 Or 256 CommonDialog1.Action=4 Text1.FontName=CommonDialog1.FontName Text1.FontSize=CommonDialog1.FontSizeCase 3 CommonDialog1.Flags=3 Or 256CommonDialog1.ShowFontWith Text1.FontName=CommonDialog1.FontName.FontSize=CommonDialog1.FontSize.FontStrikethru=CommonDialog1.FontStrikethru.FontBold=CommonDialog1.FontBold.FontItalic=CommonDialog1.FontItalic.FontUnderline=CommonDialog1.FontUnderline.ForeColor=CommonDialog1.ColorEnd WithcdlCFEffects Or cdlCFBoth或或&H3 Or&H100Action=36.“6.“打印打印”对话框对话框属性属性:(1)FromPage:起始页号:起始页号(2)ToPage:终止页号:终止页号(3)Copies:打印份数:打印份数 若打印驱动程序不支持多份打印,有可能始终返回若打印驱动程序不支持多份打印,有可能始终返回 1。Private Sub Comprint_Click()CommonDialog1.ShowPrinter 打开打开“打印打印”对话框对话框For i=1 To CommonDialog1.Copies Printer.Print Text1.Text 打印文本框中的内容打印文本框中的内容Next i Printer.EndDoc 结束文档打印结束文档打印End SubPrivate Sub fileopen_Click()CommonDialog1.Filter=文本文件文本文件|*.txtCommonDialog1.CancelError=TrueCommonDialog1.ShowOpenText1.Text=Open CommonDialog1.FileName For Input As#1 Do While Not EOF(1)Line Input#1,inputdata Text1.Text=Text1.Text+inputdata+vbcrlf Loop Close#1 Exit Sub打开模块(以后讲供参考)打开模块(以后讲供参考)保存模块(以后讲供参考)保存模块(以后讲供参考)Private Sub filesave_Click()CommonDialog1.Filter=文本文件文本文件|*.txtCommonDialog1.CancelError=TrueCommonDialog1.ShowSaveOpen CommonDialog1.FileName For Output As#1 Write#1,Text1.TextClose#1End Sub8.3 菜单的设计菜单的设计菜单形式菜单形式:主菜单名主菜单名快捷键快捷键热键热键子菜单标记子菜单标记主菜单条主菜单条分隔线分隔线菜单项子菜单名子菜单名 菜单是指应用程序中为用户提供的一菜单是指应用程序中为用户提供的一组命令,一般出现在界面顶部。组命令,一般出现在界面顶部。一、菜单编辑器的使用一、菜单编辑器的使用 1。进入菜单编辑器。进入菜单编辑器 “工具工具”菜单菜单“菜单编辑器菜单编辑器”(CTRL+E)工具栏上的工具栏上的“菜单编辑器菜单编辑器”按钮按钮 菜单列菜单列表框表框菜菜 单单 项项属性属性 操作按钮操作按钮2。常用属性:。常用属性:1.标题标题(Caption)热键:前面加热键:前面加&2.名称名称(Name)框框,分隔符也应有名称分隔符也应有名称3.快捷键快捷键(Shortcut)菜单名没有快捷键菜单名没有快捷键4.复选复选(Checked)检查框检查框 TRUE 有有 5.有效有效(Enabled)检查框检查框6.可见可见(Visible)检查框检查框3。加入分隔线:。加入分隔线:(1)单击)单击“插入插入”按钮,在按钮,在“标标题题”框中键入一个连字符(减号)框中键入一个连字符(减号)“-”;(2)在)在“名称名称”框中输入分隔线的名称框中输入分隔线的名称。4。添加代码添加代码 菜单中各个菜单项是作为一种特殊的菜单中各个菜单项是作为一种特殊的控件,他们只有一个事件,即鼠标单击控件,他们只有一个事件,即鼠标单击事件(事件(Click)事件。每当单击菜单项时,)事件。每当单击菜单项时,系统就调用该菜单项的事件处理过程,系统就调用该菜单项的事件处理过程,执行为这一过程编写的代码。执行为这一过程编写的代码。给给“黑体黑体”菜单项添加代码:菜单项添加代码:Private Sub HeiTi_Click()Text1.Fontname=黑体黑体 End Sub例例2(8-10).建立一个有菜单功能的文本编辑建立一个有菜单功能的文本编辑器器。(vb82l8-10)Private Sub songti_Click()Text1.fontname=宋体宋体End SubPrivate Sub kaiti_Click()Text1.fontname=楷体楷体_GB2312End SubPrivate Sub lishu_Click()Text1.fontname=隶书隶书End Sub二、下拉式二、下拉式 菜单设计菜单设计Private Sub slhz_Click()Text1.fontsize=16End SubPrivate Sub srhz_Click()Text1.fontsize=12End SubPrivate Sub cuti_Click()Text1.FontBold=TrueEnd SubPrivate Sub xieti_Click()Text1.FontItalic=TrueEnd Sub三、设计弹出式菜单快捷菜单三、设计弹出式菜单快捷菜单 弹出式菜单(弹出式菜单(Popup Menu)又称快捷)又称快捷菜单。通过单击右键可激活快捷菜单。菜单。通过单击右键可激活快捷菜单。快捷菜单也是利用菜单编辑器实现,设快捷菜单也是利用菜单编辑器实现,设计时应计时应将它的将它的“可见可见”复选框设为不选中复选框设为不选中,这,这样在满足条件后才弹出,菜单变为可见。样在满足条件后才弹出,菜单变为可见。弹出快捷菜单的方法是利用弹出快捷菜单的方法是利用Popupmenu方法。方法。如果一个如果一个File菜单是一个快捷菜单,它菜单是一个快捷菜单,它的的名称为名称为FileMenu,则可在其,则可在其MouseUp(按下按下鼠标)事件鼠标)事件的处理过程添加语句。的处理过程添加语句。添加下列语句添加下列语句 Private sub Form_MouseUp(Button As Integer,Shift As Integer,X as single,Y As single)If Button=2 Then PopupMenu FileMenu End If End SubButton=2表示右表示右击,为击,为1表示左击表示左击 程序运行后,如用鼠标右键在该窗口单程序运行后,如用鼠标右键在该窗口单击,则程序处理该事件,调用击,则程序处理该事件,调用PopupMenu,弹出编辑菜单。弹出编辑菜单。Popupmenu方法的语法如下方法的语法如下:.PopupMenu ,flags,x,y,BoldCommand 必给必给菜单名称菜单名称。x和和y是窗体上显示菜单的位置。是窗体上显示菜单的位置。Flags变元定义快捷菜单弹出时的位置和功变元定义快捷菜单弹出时的位置和功能,能,表表8-10列出列出flags 参数的取值和功能。参数的取值和功能。指定一个指定一个flags参数,可从每组中选取一个参数,可从每组中选取一个常数,用逻辑常数,用逻辑“或或”组合。组合。要加粗的子菜单名要加粗的子菜单名例例 题题 例例3(8-11)修改例修改例2,将,将“格式格式”作为子弹出菜单作为子弹出菜单使菜单以使菜单以x为中心,且左、右键单击时都可为中心,且左、右键单击时都可触发子菜单项。触发子菜单项。(vb82L8-11)对文本框操作才对文本框操作才需要加这两句需要加这两句Private Sub Text1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)Text1.Enabled=False 撤消系统默认弹出菜单撤消系统默认弹出菜单Text1.Enabled=True 使使Text1可用可用If Button=2 Then PopupMenu gs,4 Or 2 End IfEnd Sub上机作业上机作业:1。建立一个文本框和如图命令按钮,。建立一个文本框和如图命令按钮,“打开打开”可在文本框显示打开的文件名,可在文本框显示打开的文件名,“颜色颜色”可设置可设置文本框背景色,文本框背景色,“字体字体”可设文本框的字体、字可设文本框的字体、字号、颜色、删除线、下划线号、颜色、删除线、下划线也可建立两个菜单:也可建立两个菜单:文件文件-打开打开 退出退出格式格式-颜色颜色 字体字体l2。P71 四、实验题目四、实验题目l3。P76 四、实验题目四、实验题目复 习1.添加一个文件菜单和打开、退出子添加一个文件菜单和打开、退出子菜单中间加分隔线菜单中间加分隔线2,将,将“Edit”作为弹出菜单,在文本框上,单作为弹出菜单,在文本框上,单击鼠标右键时可弹出快捷菜单,代码如何写。击鼠标右键时可弹出快捷菜单,代码如何写。Private Sub Text1_MouseDown()Text1.Enabled=False 撤消系统默认弹出菜单撤消系统默认弹出菜单Text1.Enabled=True 使使Text1可用可用If Button=2 Then PopupMenu Edit End IfEnd Sub将将Edit的可见属性社为假的可见属性社为假8.4 多文档界面多文档界面一、界面样式一、界面样式 WindowsWindows应用程序的用户界面主要有应用程序的用户界面主要有两种:两种:一种是单文档界面一种是单文档界面(SDI(SDI),),另一种是多另一种是多文档界面文档界面(MDI(MDI),也称为多重窗体。,也称为多重窗体。Windows Windows中的记事本就属于中的记事本就属于SDISDI。Word Word是一个是一个MDIMDI界面,允许同时打开多界面,允许同时打开多个文档。个文档。多文档界面是把若干窗体多文档界面是把若干窗体“封装封装”在在一个窗体中,即:用一个窗体来操作其它窗一个窗体中,即:用一个窗体来操作其它窗体。可操作其它窗体的体。可操作其它窗体的称为父窗体称为父窗体,其它被,其它被装入的称为装入的称为子窗体子窗体。二、多文档界面中窗体之间的关系二、多文档界面中窗体之间的关系1.1.父窗体与子窗体的关系父窗体与子窗体的关系 在在MDIMDI应用程序中,父窗体只能有应用程序中,父窗体只能有一个,而子窗体则可有多个。父窗体主一个,而子窗体则可有多个。父窗体主要用于显示或排列子窗体。父窗体关闭要用于显示或排列子窗体。父窗体关闭时,子窗体也随之关闭。时,子窗体也随之关闭。子窗体在父窗体中按三种方式排列:子窗体在父窗体中按三种方式排列:层叠、水平平铺、垂直平铺层叠、水平平铺、垂直平铺。2.2.子窗体与子窗体的关系子窗体与子窗体的关系 子窗体间是相互独立的,但它们可以子窗体间是相互独立的,但它们可以调用共享的模块,也可以交换数据。调用共享的模块,也可以交换数据。一般是当前活动窗体排在最前面一般是当前活动窗体排在最前面。三、创建三、创建MDIMDI应用程序的方法与步骤应用程序的方法与步骤 1 1、使用、使用“应用程序向导应用程序向导”生成生成MDIMDI(1 1)选择)选择“文件文件”菜单下的菜单下的“新建工程新建工程”命令。命令。(2 2)在)在“新建工程新建工程”的对话框中选择的对话框中选择“VBVB应用程序向导应用程序向导”。(3 3)进入进入“VB“VB应用程序向导应用程序向导”后,在选后,在选择界面类型时,选择择界面类型时,选择“多文档界面多文档界面(MDIMDI)”。单击。单击“下一步下一步”或或“完成完成”按钮。按钮。2 2使用使用“菜单和属性窗口菜单和属性窗口”生成生成MDIMDI(1 1)选)选“文件文件”下的下的“新建工程新建工程”,开始,开始一新工程。一新工程。(2 2)选)选“工程工程”上的上的“添加添加MDIMDI窗体窗体”,加一加一MDIMDI窗体。窗体。(3 3)选)选“工程工程”菜单的菜单的“添加窗体添加窗体”,添,添加一窗体。加一窗体。(4 4)打开属性窗口,把)打开属性窗口,把添加窗体的添加窗体的MDIChildMDIChild的属性设为的属性设为TrueTrue即可。即可。3.MDI3.MDI窗体窗体(父窗体)与子窗体的交互父窗体)与子窗体的交互*(1)活动子窗体和活动控件活动子窗体和活动控件 MDI窗体的两个属性:窗体的两个属性:ActiveForm 和和ActiveControl 分别表示:分别表示:活动窗体和活动窗体上有焦点的控件活动窗体和活动窗体上有焦点的控件 将子窗体的文本框中所选文本复制到剪贴板上:将子窗体的文本框中所选文本复制到剪贴板上:ClipBoard.SetText frmMDI.ActiveForm._ ActiveControl.SelText 将剪贴板上文本粘贴到子窗体的文本框中将剪贴板上文本粘贴到子窗体的文本框中:frmMDI.ActiveForm.ActiveControl.SelText=_ ClipBoard.GetText 问问:如何把文本框选中的文本复制:如何把文本框选中的文本复制/剪切到剪切板剪切到剪切板?ClipBoard.SetText Text1.SelText,Text1.SelText=(2)显示显示MDI窗体及其子窗体窗体及其子窗体 显示窗体的方法为显示窗体的方法为Show,有关规则:有关规则:1)加载子窗体时,其父窗体会自动加载并显加载子窗体时,其父窗体会自动加载并显示示;反之则无。应把子窗体作为启动窗体。;反之则无。应把子窗体作为启动窗体。设置启动窗体:设置启动窗体:“工程工程/工程属性工程属性/启动对象启动对象”选启动窗体名选启动窗体名