大学VISUAL BASIC程序设计教程-课件PPT
收藏
资源目录
压缩包内文档预览:
编号:21836467
类型:共享资源
大小:5.82MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学VISUAL
BASIC程序设计教程-课件PPT
大学
visual
basic
程序设计
教程
课件
ppt
- 资源描述:
-
大学VISUAL BASIC程序设计教程-课件PPT,大学VISUAL,BASIC程序设计教程-课件PPT,大学,visual,basic,程序设计,教程,课件,ppt
- 内容简介:
-
10.1 对话框控件,10.2 菜单程序设计,10.3 多重窗体和多文档界面,10.4 工具条和状态栏,10.5 RichTextBox 控件,第10章 界面设计,退出,10.6 应用程序向导,通用对话框控件(CommonDialog)提供一组标准的操作对话框来返回信息。 可以在“部件”对话框中通过选中“Microsoft Common Dialog Control 6.0”在工具箱中添加通用对话框控件。设计时在窗体上绘制的通用对话框不能改变大小,运行时控件被隐藏,可以通过设置不同Action属性值和使用不同的方法来决定对话框的类型。,表10-1 CommonDialog 控件提供的对话框,10.1.1通用对话框,10.1 对话框控件,Action属性只能在程序中赋值,而不能在属性窗口进行设置。通用对话框的其他共同属性有: (1)CancelError 属性 在通用对话框内有一个“确定”按钮和一个“取消”按钮,前者表示确认,后者表示放弃。 (2)DialogTitle 属性 设置对话框标题栏所显示的字符串。 (3)Flags属性 Flags属性用来修改通用对话框的每个具体对话框的默认设置。 通用对话框的属性除了在属性窗口和程序代码中设置外,还可以在其“属性页”对话框中设置。右键单击窗体上通用对话框控件,从弹出的快捷菜单中选择“属性”命令即可打开“属性页”对话框。 1. 文件对话框 使用ShowOpen方法或ShowSave方法显示的“打开”文件对话框或“另存为”文件对话框,尽管作用不一样,但其外观及其属性基本一致,与熟悉的Word界面的“打开”文件对话框或“另存为”文件对话框的外观和作用类似。,文件对话框的主要属性有: (1)DefaultExt 属性 为对话框设置缺省的文件扩展名,如 .txt 或 .doc。 (2)FileName 属性 设置所选文件的路径和文件名。 (3)FileTitle 属性 设置要打开或保存文件的名称(没有路径)。 (4)Filter 属性(公共对话框) 设置在对话框的类型列表框中所显示的过滤器(即限定的文件类型)。其语法格式为:object.Filter = description1 |filter1 |description2 |filter2. (5)InitDir属性 该属性用来指定文件对话框中的初始目录,如果该属性没有指定,则使用当前目录。,图10-1 打开文件对话框,图10-2 通用对话框控件(“颜色”对话框),2. 颜色对话框 通过使用通用对话框的 ShowColor 方法可显示“颜色”对话框。“颜色”对话框用以从调色板选择颜色,或是生成和选择自定义颜色。使用“颜色”对话框前先设置通用对话框控件中与颜色对话相关的属性,然后使用 ShowColor 方法显示对话框,使用 Color 属性检索所选的颜色。 Color 属性用来设置或返回选定的颜色。其语法格式为: object.Color = number,3. 字体对话框 使用 通用对话框的 ShowFont 方法可显示“字体”对话框。“字体”对话框用来为文字指定字体、大小、颜色和样式。 如要使用“字体”对话框,先设置 通用对话框中与字体对话相关的属性,然后使用ShowFont 方法显示对话框。表10-2是与字体有关的属性。,表10-2 与字体有关的属性,4. 打印对话框 通过使用通用对话框的ShowPrinter 方法可显示“打印”对话框。“打印”对话框可用以指定打印输出方式,被打印页的范围,打印质量,打印的份数等等。这个对话框还包含当前安装的打印机的信息,并允许配置或重新安装缺省打印机。这个对话框并不给打印机传送数据,只是指定希望打印数据的情况。如果 PrinterDefault 属性为 True,可以使用 Printer 对象按选定的格式打印数据。 与“打印”对话框有关的属性参见表10-3。,表10-3 与“打印”对话框有关的属性,表10-4 与“帮助”对话框有关的属性,5. 帮助对话框 通用对话框的 ShowHelp 方法可运行 Windows 的帮助引擎 (WINHELP.EXE),并显示由 HelpFile 属性设定的一个帮助文件。 通过 HelpCommand 属性的设置,可以告诉该帮助引擎想要哪种类型的联机帮助,比如是上下文相关,或是特定关键字的帮助,等等。 与“帮助”对话框有关的属性参见表10-4。,例10-1:设计一个工程,实现通用对话框的基本功能。文件对话框的形式参见图10-3。颜色对话框的形式参见图10-2。字体对话框的形式参见图10-5。 1.界面设计,图10-3文件对话框的形式 图10-4 界面设计,图10-5 字体对话框的形式,10.1.2自定义对话框,1. 自定义对话框的种类与建立,通过添加窗体的方法在“添加窗体”对话框中选择“对话框”来新建一个标准的对话框,然后根据需要,用户完全可以自行设计对话框的外观和功能,这就是自定义对话框。,自定义对话框分为两种类型,即模式自定义对话框和无模式自定义对话框。,表10-5 自定义对话框属性设置,图10-6 自定义对话框,2. 对话框的显示与卸载,对话框就是一种窗体,因此可以象窗体一样进行加载、显示、隐藏和卸载。,假设对话框名称为Dialog1,将该对话框显示为模式的Show方法格式为:,Dialog1. Show vbModal,而将该对话框显示为无模式的Show方法格式为:,Dialog1. Show,要卸载或隐藏自定义对话框,可以在对话框的“确定”或“取消”命令按钮的单击事件中使用Unload方法或Hide方法。,10.2 菜单程序设计,在窗口环境下,绝大多数应用程序使用菜单界面进行各种操作。菜单提供了人机对话界面,方便使用者选择应用系统的各种功能。另外,通过菜单可以管理应用系统,控制应用程序各种功能模块的运行。,菜单可分为下拉式菜单和弹出式菜单两种基本类型。,在 VB 中,菜单控件也是一个对象,具有定义它的外观与行为的属性。菜单控件只包含一个事件,即单击事件。,图10-7 下拉式菜单的组成,10.2.1 使用菜单编辑器设计菜单,图10-8 菜单编辑器,从菜单编器器窗口可知,菜单编器器窗口分为三个部分,即数据区、编辑区和菜单项显示区。,1.数据区 数据区为窗口标题栏下面的 5 行,用来输入或修改菜单项,设置属性。其中的主要项目的作用见表 10-6 。,表 10-6 菜单控件的主要属性,2.编辑区,编辑区由 7 个按钮组成,单击右箭头将把选定的菜单向右移一个等级。单击左箭头将把选定的菜单向上移一个等级。单击上箭头将把选定的菜单项在同级菜单内向上移动一个位置。单击下箭头把选定的菜单项在同级菜单内向下移动一个位置。单击“下一个”按钮将开始一个新的菜单项。单击“插入”按钮将在某个菜单项前插入一个新的同级空白菜单项。单击“删除”按钮将删除选定的菜单项。,3.菜单项列表区,菜单项列表区为菜单编辑器最下面的列表框,该列表框显示菜单项的分级列表。将子菜单项缩进以指出它们的分级位置或等级。参见图 10-8 。,图10-8 菜单编辑器,在使用Word应用程序时经常会发现,某些菜单项会呈灰色显示,此时单击该次菜单项没有任何反映,有时菜单项的标题会发生改变。这些都可以通过在菜单设计和程序代码中加以控制。 (1)有效性控制 一个菜单项是否正常显示,即该菜单项是否“有效”,是由该菜单项的“有效”属性来控制的。只有该属性设置为True时,单击该菜单项才会执行相应的操作。可以在设计时设置该属性值(选中图10-8中的“有效”复选框),也可以在运行时通过执行代码加以改变。 (2)可见性控制 只有将菜单项的Visible属性设置为True,该菜单项才显示。可以在设计时设置该属性值(选中图10-8中的“可见”复选框),也可以在运行时通过执行代码加以改变。 (3)菜单项标记 菜单项标记就是在菜单项左边加上标记 表明该菜单项处于选择状态。设计时该属性可以由菜单编辑器中的“复选”(Checked)属性设置,也可以在属性窗口的“Checked”栏内设置。通常情况下,该属性时在程序运行时动态地进行设置的。,任何复杂的菜单程序都遵循相同的设计方法,下面通过一个实例来说明编写菜单程序的过程。 例 10-2 :某电脑销售公司销售系统界面见图10-9 ,部分菜单的内容见表 10-2 。试按表 10-7 设计菜单。,10.2.2 用菜单编辑器建立菜单的实例,图10-9 应用程序界面,表 10-7 菜单结构,1.菜单结构设计步骤,(1)打开需要设计菜单的窗口。,(2)打开菜单编辑器对话框,(3)在图10-8所示的菜单编辑器对话框的“标题”栏输入“用户&F”(&F表示热键为F),此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MUser”,在“快捷键”下拉框内选择“None”。,(4)单击“下一个”按钮,菜单项显示区的条形光标下移,同时,菜单编辑器数据区清空。在“标题”栏输入“新建&N”,此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MNew”,在“快捷键”下拉框内选择“Ctrl+N”。,(5)单击编辑区的右箭头在菜单项显示区的“新建&N”左边出现符号“”,表明“新建”是“用户”的下一级子菜单。,,,(6)仿照上面的步骤,建立所有菜单项,注意各菜单之间的关系用右箭头和左箭头按钮进行调整。,2.编写程序代码 设计好菜单后,需要编写菜单项的Click事件过程。 Private Sub dakai_Click(Index As Integer) Dim sFile As String Label1.Visible=False 隐藏Label1控件(即显示“欢迎”字样的的控件) On Error GoTo nofile 设置错误陷阱 With CommonDialog1 CommonDialog1为添加的通用对话框控件 .DialogTitle = “打开“ .CancelError = False .InitDir = “d:“ .Filter = “文本文件 |*.Txt“ .ShowOpen 显示“打开”对话框 If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End With nofile: 错误处理 If Err.Number = 32755 Then Exit Sub End If 添加处理打开的文件的代码 End Sub,10.2.3 菜单项的增减,1.增加菜单项 菜单项的增减是通过菜单控件数组实现的。菜单控件数组和普通数组一样,是通过下标来访问数组中的元素(这里为菜单项)的。菜单控件数组可以设计时建立,也可以在运行时建立。 例10-3:在例10-2中,要求在程序运行时,在“文件”菜单的“退出”菜单项之上保留最近打开的文件清单。增加一个“清除”菜单项,当单击该菜单项时,将清除所有文件清单。 (1)打开如图10-8所示的菜单编辑器,单击菜单列表区中的“退出”项。 (2)单击“插入”按钮,清除数据区的内容。 (3)在“标题”栏输入“文件清单”,在“名称”栏内输入“MdocuName”(菜单名称),输入“索引”值0以使“MdocuName”菜单项成为菜单控件数组,设置“可见”属性为False。 (4)在“退出”菜单项前新增一个分隔符号,设置“可见”属性为False。 (5)在“退出”菜单项前新增一个标题为“清除”、名称为Clear的菜单项,设置“有效”属性为False。 (6)在窗体层定义变量menucounter控制菜单控件数组的下标。 Dim menucounter As Integer,(7)在“新建”和“打开”菜单项的Click事件过程中加上如下代码: menucounter = menucounter + 1 If menucounter 0 Then 当“MdocuName”菜单项不为空时,“清除”菜单项有效 Clear.Enabled = True Else Clear.Enabled = False End If,图10-10 初始菜单 图10-11 打开文件后的菜单,图10-10为“MdocuName”菜单项为空的情况(即没有一个文件打开),图10-11为打开了四个文件后的情况。,2.删除菜单项 在运行时用load语句增加的菜单项可以使用Unload语句删除,但不能删除设计时建立的菜单项。如单击“用户 | 清除”菜单项时,删除所有打开的文件清单,可以编写如下代码: Private Sub Clear_Click() For i = 0 To menucounter - 1 Unload Mdocumenu(menucounter - i) Next MSeg14.Visible = False 删除不必要的分隔线 End Sub,10.2.4 弹出菜单,弹出菜单是独立于菜单栏的浮动菜单,其在窗体上的显示位置由单击鼠标时指针的位置决定。,在VB中,使用PopupMenu方法来显示弹出菜单。PopupMenu方法的语法为:,对象. PopupMenu 菜单名,标志,x,y,表10-8用于“标志 ” 的设置值,在例10-2中,当在Form1窗体上单击鼠标右键时,要求在光标处弹出“用户”菜单,需要添加的代码为: Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu MUser, vbPopupMenuCenterAlign End Sub PopupMenu可以适用于所有的菜单项,如有下列事件代码: Private Sub ListCPU_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu MParta, vbPopupMenuCenterAlign End Sub 当鼠标右键单击ListCPU控件(为一个列表框控件,用于选择CPU配件)时,弹出“主要部件”子菜单,以便选择其他主要部件(打开其他配件的列表框)。MParta为主要部件子菜单的名称。,对于较为简单的应用程序,一个窗体就足够了。对于复杂的应用程序,往往需要通过多重窗体(MultiForm)来实现。每一个窗体可以有不同的界面和程序代码,以完成不同的功能。如有的窗体用来输入数据,有的窗体用来显示结果等等。 多文档界面(MDI,multiple document interface)是一种典型的Windows应用程序结构。多文档界面由一个父窗体(简称MDI窗体)和一个或多个子窗体组成,MDI窗体作为子窗体的容器,子窗体包含在父窗体之内,用来显示各自的文档,所有的子窗体都具有相同的功能。,10.3 多重窗体和多文档界面,1.添加窗体 单击“工程 | 添加窗体”命令或单击工具条上的“添加窗体”按钮 ,打开“添加窗体”对话框,单击“新建”选项卡,从列表框中选择一种新窗体的类型;或者单击“现存”选项卡,将属于其他工程的窗体添加到当前过程中。,2.与多重窗体程序设计有关的语句和方法 多重窗体的操作需要在各个窗体之间进行切换,涉及到窗体的“建立”、“装入”、“显示”、“隐藏”、“删除”等操作。 (1)Load语句 Load语句的作用是将一个窗体装入内存,但并不显示窗体,其语法格式为: Load 窗体名称 (2)Unload语句 Unload语句的功能与Load语句相反,是将窗体从内存中删除。Unload语句的语法格式为: Unload 窗体名称,10.3.1 多重窗体,(3)Show方法 Show方法的语法格式为: 窗体名称.Show 模式 (4)Hide方法 用以隐藏窗体对象,但不能使其卸载。Hide方法的语法格式为: 窗体名称.Hide 隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。 窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。 如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。,3.不同窗体之间的数据交换 可以在多重窗体之间存取控件或全局变量的值。 4.设置启动对象 在具有多个窗体的应用程序中,各个窗体之间是并列关系。程序运行时,首先执行的对象模认为第一个创建的窗口Form1,称为启动对象。根据需要可以指定其他窗体或Main子过程为启动对象。,图10-12 指定启动对象,5. 闲置循环与DoEvents语句 VB语言属于事件驱动型语言,即只有当发生某种事件时,才执行相应的程序,否则,应用程序会处于“闲置”状态。而一旦响应某个事件时,只有在该事件执行完毕后才能响应另外的事件为了改变这种执行顺序,VB提供了闲置循环(idle loop)和DoEvents语句。 DoEvents既可以作为语句使用,也可以作为函数使用,其一般格式为: 窗体号 | 变量名=DoEvents() DoEvents函数 DoEvents DoEvents语句,例10-4:在例10-2中,增加一个Sub main过程作为启动过程,在闲置状态下,使Label1标签水平滚动,当应用程序响应其他事件,如单击“用户 | 新建”菜单项时,只要闲置事件超过一定的时间(由时钟控件Timer1的Interval属性值控制),重新执行闲置循环。 (1)单击“工程 | 添加模块”,在新建的模块窗口加上如下代码: Sub main() Form1.Show Do While DoEvents() If Form1.Label1.Left Form1.ScaleWidth - 10 Then Form1.Label1.Left = Form1.ScaleLeft Else Form1.Label1.Left = Form1.Label1.Left + 1 End If Loop End Sub (2)新增一个时钟控件Timer1,并加上如下代码: Private Sub Timer1_Timer() Label1.Visible = True End Sub (3)在事件过程(如New_Click事件过程)中加上如下代码: Private Sub New_Click() New为“新建”菜单项的名称 Label1.Visible = False End Sub 程序运行时,如果没有任何事件发生,则Label1标签水平滚动,单击任何菜单或其他按钮,Label1标签将停止水平滚动,如果事件过程中加上“Label1.Visible = False”之类的代码,则延时后继续滚动,否则立即开始滚动。,下面结合实例介绍多文档界面应用程序的特点。 在菜单设计一节创建了一个“电脑销售系统”的范例,在该例的基础上建立多文档界面。用户每次单击“用户”菜单下的“新建”命令,将显示一个新的Form1类的窗口,该窗口中的文本框显示用户配置情况。用户单击“部件”菜单下的不同的命令,将打开不同的对话框,供用户选择不同的配件,用户的选择将显示在文本框中。,图10-13 多文档界面 图10-14 三种形式的窗体,10.3.2 多文档界面,1.建立多文档界面的基本步骤 (1)创建和设计MDI父窗体 (2)创建和设计MDI子窗体 如下面的newclient子过程运行时创建Form1窗体。 Public Sub newclient() Dim newform1 As New Form1, name As String 在这里添加将自定义记录类型变量Clientnumber 清零,该变量保存客户资料 Form1.Hide name = InputBox(“请输入姓名“, “客户名称“) If name “ Then MDIForm1.Picture1.Visible = False newform1.Show clientnumber.clientname = name MDIForm1.ActiveForm.Text1.Text = name + vbCrLf End If End Sub,(3)MDI子窗体的特性 在设计阶段,子窗体独立于父窗体,与普通的VB窗体没有任何区别,可以在子窗体上增加控件、设置属性、编写代码。 在运行期间,MDI窗体及其子窗体具有如下特性: 1)所有子窗体都只能在MDI窗体内部进行调整,不能超出MDI窗体之外。 2)最小化的子窗体出现在MDI窗体上,并不在桌面的任务栏上显示。最小化MDI窗体时,MDI窗体在任务栏上显示为图标。 3)在子窗体处于最小化和最大化之间时,每个子窗体都有自己的标题(参见图10-13),当子窗体最大化时,其标题与MDI窗体的标题合并,并显示在MDI窗体的标题栏上。 4)将MDI窗体的AutoShowChildren属性设置为True,可以使子窗体在装入时自动显示。 5)活动子窗体的菜单将显示在MDI窗体上,而不是子窗体上。,2.MDI窗体上的控制区 MDI窗体分为两部分,其中上面一部分称为控制区,下面一部分称为工作区。,建立了MDI父窗体、子窗体,确定了启动窗体并建立了控制区后,就可以根据需要编写程序代码了。MDI父窗体的控制区及各个子窗体内都可以建立控件,可以像单一窗体一样编写程序代码。,图10-15 在MDI窗体上建立控制区,3.MDI窗体和子窗体之间的交互 (1)设置活动子窗体和活动控件 在MDI窗体上显示的子窗体不止一个时,可以通过 ActiveForm属性得到或指定哪一个子窗体为活动的。 在newclient子过程中的语句 MDIForm1.ActiveForm.Text1.Text =name + vbCrLf 即表示为MDIForm1父窗体中最后一个获得焦点的子窗体的文本框设置Text属性值。 同样,当在一个窗体上显示的控件不止一个时,可以通过 ActiveControl属性得到或指定哪一个控件为得到焦点的控件。,4.窗体显示与QueryUnload事件 (1)窗体显示 当MDI窗体为启动窗体时,子窗体不能自动装入,当子窗体为启动窗体时,MDI窗体自动装入。 (2)QueryUnload事件 为了避免随着父窗体的关闭而使所有的子窗体结束,造成子窗体内容的丢失,VB提供了QueryUnload事件。 下面是QueryUnload事件的实例: Private Sub MDI父窗体名|子窗体名Form_QueryUnload (Cancel As Integer, UnloadMode As Integer) Dim Msg 声明变量。 If UnloadMode 0 Then 如果正在退出应用程序 Msg = “你真想退出应用程序吗?“ FileSaveProc 调用保存数据的过程FileSaveProc Else 如果正在关闭窗体 Msg = “你真想关闭窗体吗?“ End If 如果用户单击No按钮,则停止QueryUnload。 If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True End Sub,表10-9 UnloadMode参数的取值,表10-10 Arrange方法的方式设置值,5. 窗体排列 Arrange方法用以重排 MDIForm 对象中的窗口或图标,如上述工程的“窗口”菜单下即为排列窗口的命令,其中“垂直排列”单击事件为: Private Sub Varrange_Click() MDIForm1.Arrange 2 End Sub 其中: “2”为排列方式参数,其余方式参数设置值参见表10-10。,6. MDI应用程序中的菜单 在MDI应用程序中,菜单可以建立在父窗体上,也可以建立在子窗体上,也可以分别建立。每个子窗体的菜单在MDl父窗体上显示,而不是在子窗体本身显示。当一个子窗体为活动窗(即有焦点)时,如果该子窗体的有菜单,则该菜单将取代MDI窗体菜单条上的菜单。如果没有可见的子窗体,或者有焦点的子窗体没有菜单,则显示MDI父窗体的菜单。 通过把某个菜单的WindowList属性设置为True,可以用MDI窗体或子窗体上的任何菜单显示已打开的子窗体的列表。设置WindowList属性的步骤如下: (1)选择要显示菜单的窗体(父窗体或子窗体),执行“工具“菜单中的“菜单编辑器”命令 , 打开“菜单编辑器”窗口。 (2)在菜单项显示区中,选择要将窗体列表显示在其中的菜单,如“用户”菜单。 (3)选择“显示窗口列表”(WindowList)复选框。 在运行期间,这个菜单显示打开的子窗体的列表,同时,这个菜单的WindowList属性作为True返回。,10.4 工具条和状态栏,命令条将菜单及工具栏的概念统一成为一个一般性的、可视的、可编程的对象。作为命令条,菜单包含了具有图标和标题的菜单命令,并且在保持大家熟悉的菜单格式的同时还表现出类似于按钮的特性。有些工具栏按钮与组合框控件类似,带有下拉箭头。某些类型的命令条对象可以包括其它的命令条对象。 状态栏StatusBar控件用来显示各种信息。 为了使用上述控件,应首先打开“部件”对话框,选中“Microsoft Windows Common Controls6.0”,将控件添加到VB工具箱中。参见图10-16下面三行。 制作工具条有两种方法: (1)手工制作:利用图形框和命令按钮,这种方法比较繁琐。 (2)通过ToolBar、ImageList控件制作。,图10-16 工具箱,(1)执行“工程”菜单中的“添加MDI窗体”命令,建立个MDI窗体。 (2)在MDI窗体上画一个ToolBar控件、在ToolBar控件上画一个ImageList控件。 (3)在ImageList控件中添加图像。 (4)在ToolBar控件中添加按钮。,10.4.1 在MDI窗体上建立工具条的一般步骤,1. 在ImageList控件中添加图像 (1)ImageList控件 ImageList 控件包含 ListImage 对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。如工具栏控件(ToolBar)中的图像就是从ImageList 控件中获取的。 (2)在ImageList控件中添加图像 在ToolBar控件上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择“属性”命令,打开如图10-17所示“属性页”对话框,选择其中的“图像” 选项卡。,图10-17 ImageList控件属性页之“图像”选项卡,2. 在ToolBar控件中添加按钮 (1)ToolBar控件 ToolBar控件包含一个按钮对象集合,该对象被用来创建与应用程序相关联的工具栏。工具栏包含一些按钮,这些按钮与应用程序菜单中各项的按钮对应,工具栏为用户访问应用程序的最常用功能和命令提供了图形接口。 (2)为工具栏连接按钮 右键单击Toolbar控件,选择“属性”命令打开如图10-18所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。,图10-18 ToolBar控件“属性页”,(3)为工具栏增加按钮 打开“属性页”上的“按钮”选项卡(参见图10-19),单击“插入按钮”,可以在工具栏上插入按钮。,图10-19 Toolbar控件“按钮”选项卡,图10-20 工具栏实例,表10-12 按钮样式,3. 响应Toolbar控件的事件 Toolbar控件的主要事件有ButtonClick 事件(对应按钮样式0-2)和ButtonMenuClick 事件(对应按钮样式5)。由于工具栏上的按钮为控件数组,故既可以用索引(Index属性),也可以用关键字(Key属性)来识别按钮,但要注意用户可用“自定义工具栏”对话框重新安排按钮对象,Index 属性值可能并不一定总指示按钮的位置。因此,最好的方法是用 Key 属性值识别按钮对象。 下列的ButtonClick 事件代码就用到按钮对象的Key 属性(假设在Form1窗体上增添了通用对话框控件CommonDialog1)。 Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key Case “TNew“ Form1.CommonDialog1.ShowNew Case “TOpen“ Form1.CommonDialog1.ShowOpen End Select End Sub ButtonMenuClick 事件的语法格式类似为: Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu) End Sub,1. StatusBar 控件 StatusBar 控件就是一个窗体,该窗体通常放在父窗体的底部,或通过其Align属性设置其出现的位置。通过StatusBar 控件,应用程序能显示各种状态数据。StatusBar 控件由面板(Panel) 对象组成,一个StatusBar 控件最多可以有16个Panel 对象,每一个 Panel 对象都可包含文本和/或图片。可以控制每个Panel对象的外观属性,包括 Width、Alignment(文本和图片的)和 Bevel(文本显示的样式)。还可以使用 Style 属性值中的一个自动地显示公共数据。 2. 状态栏的建立 在设计时,在窗体上增加 StatusBar 控件,并在其属性页的“窗格”选项卡中进行必要的设置,以建立面板并定制它们的外观。,图10-22 状态栏实例 在运行时,也可以重新配置 Panel 对象以反映不同的功能,这些功能取决于应用程序的状态。在本例中,第2、4、6个面板中显示的文本将根据用户选择的电脑配件类型,由应用程序给出。,10.4.2 状态栏(StatusBar 控件),数表示)。,表10-13 状态栏的Style属性,图10-22 状态栏实例,图10-21 状态栏“窗格”选项卡,图10-22即为设计好的状态栏,包括6个面板。,用 LoadFile 和 SaveFile 方法可以方便地为 RichTextBox 控件打开或保存 RTF 文件。 1. 打开文件 在工具条的实例中,已经在Form1窗体上添加了一个通用对话框CommonDialog1,现在再添加一个RichTextBox 控件RichTextBox1,编写如下代码: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Dim strOpen As String 为文件名声明 String 变量 Select Case Button.Key Case “TOpen“ Form1.CommonDialog1.ShowOpen 显示 “打开文件”对话框 strOpen = Form1.CommonDialog1.FileName 将变量设置为文件名 Form1.RichTextBox1.LoadFile strOpen 用 LoadFile 方法打开该文件 End Select End Sub,10.5 RichTextBox 控件,10.5.1 RichTextBox 控件,RichTextBox 控件不仅允许输入和编辑文本,同时还提供了标准 TextBox 控件不具有的、更高级的指定格式的许多功能。,10.6.2 用 LoadFile 和 SaveFile 方法打开和保存文件,RichTextBox控件除了拥有Text文本控件中一些常用的、用来进行格式化的属性,如SelText、SelStart、SelLength等外,还具有一些特别的属性。 1. SelFontName、SelFontSize 和 SelColor属性 要改变 RichTextBox 控件中的字体特性,可以使用 SelFontName、SelFontSize 和 SelColor 属性。 通常使用组合框控件显示这些属性的选项。随后可用组合框控件的 Click 事件改变属性。 在工具条实例中,在工具栏上添加一个样式为tbrPlaceholedr的按钮,然后在该按钮上添加一个组合框控件Combo2,在 Form 对象的 Load 事件中加上如下代码: Private Sub Form_Load() Dim i As Integer RichTextBox1.Width = Form1.ScaleWidth With MDIForm1.Combo2 For i = 0 To Screen.FontCount - 1 .AddItem Screen.Fonts(i) Next i End With End Sub 程序运行时,将在Combo2控件的列表框中添加所有屏幕字体。如果在RichTextBox1 控件中有文本,则可以用如下Combo2控件的 Click 事件改变 RichTextBox1 控件中选定的文本的 SelFontName 属性(即改变字体): Private Sub Combo2_Click() RichTextBox1.SelFontName = Combo2.Text End Sub,10.5.3 RichTextBox控件的格式化属性,1. 将对象拖动到RichTextBox控件中 在运行时,可以将任何嵌入对象拖动并放入 RichTextBox 控件。在控件中可以嵌入两种对象:以图标形式显示的对象,和以数据形式显示的对象。,2. 用 OLEObjects 集合的 Add 方法添加嵌入对象 用 OLEObject 集合的 Add 方法可将嵌入对象以编程方式加入RichTextBox控件。 设在Form1窗体上添加一个命令按钮cmdInsertpicture,将C盘下的“bbb.bmp”图片添加到RichTextBox控件中。代码如下: Private Sub cmdInsertpicture_Click() Form1.RichTextBox1.OLEObjects.Add , “c:bbb.bmp“ 位图添加到该控件中 End Sub,10.5.5 在RichTextBox控件中嵌入对象,图10-23 在RichTextBox控件中嵌入对象,在VB中,提供了称为“应用程序向导”的程序生成器,可以用来方便地生成应用程序的界面。,10.6 应用程序向导,图10-24 利用应用程序向导创建的应用程序界面实例,图10-25 “应用程序向-界面类型”对话框,图10-26 “应用程序向-菜单”对话框,图10-28 “应用程序向-Internet链接”对话框,图10-27 “应用程序向-自定义工具栏”对话框,10.1 对话框控件10.2 菜单程序设计10.3 多重窗体和多文档界面10.4 工具条和状态栏10.5 RichTextBox 控件第10章 界面设计退出10.6 应用程序向导通用对话框控件(CommonDialog)提供一组标准的操作对话框来返回信息。可以在“部件”对话框中通过选中“Microsoft Common Dialog Control 6.0”在工具箱中添加通用对话框控件。设计时在窗体上绘制的通用对话框不能改变大小,运行时控件被隐藏,可以通过设置不同Action属性值和使用不同的方法来决定对话框的类型。表10-1 CommonDialog 控件提供的对话框10.1.1通用对话框10.1 对话框控件Action属性只能在程序中赋值,而不能在属性窗口进行设置。通用对话框的其他共同属性有:(1)CancelError 属性在通用对话框内有一个“确定”按钮和一个“取消”按钮,前者表示确认,后者表示放弃。(2)DialogTitle 属性设置对话框标题栏所显示的字符串。(3)Flags属性Flags属性用来修改通用对话框的每个具体对话框的默认设置。通用对话框的属性除了在属性窗口和程序代码中设置外,还可以在其“属性页”对话框中设置。右键单击窗体上通用对话框控件,从弹出的快捷菜单中选择“属性”命令即可打开“属性页”对话框。1. 文件对话框使用ShowOpen方法或ShowSave方法显示的“打开”文件对话框或“另存为”文件对话框,尽管作用不一样,但其外观及其属性基本一致,与熟悉的Word界面的“打开”文件对话框或“另存为”文件对话框的外观和作用类似。文件对话框的主要属性有:(1)DefaultExt 属性为对话框设置缺省的文件扩展名,如 .txt 或 .doc。(2)FileName 属性设置所选文件的路径和文件名。(3)FileTitle 属性设置要打开或保存文件的名称(没有路径)。(4)Filter 属性(公共对话框)设置在对话框的类型列表框中所显示的过滤器(即限定的文件类型)。其语法格式为:object.Filter = description1 |filter1 |description2 |filter2.(5)InitDir属性该属性用来指定文件对话框中的初始目录,如果该属性没有指定,则使用当前目录。 图10-1 打开文件对话框图10-2 通用对话框控件(“颜色”对话框)2. 颜色对话框通过使用通用对话框的 ShowColor 方法可显示“颜色”对话框。“颜色”对话框用以从调色板选择颜色,或是生成和选择自定义颜色。使用“颜色”对话框前先设置通用对话框控件中与颜色对话相关的属性,然后使用 ShowColor 方法显示对话框,使用 Color 属性检索所选的颜色。Color 属性用来设置或返回选定的颜色。其语法格式为:object.Color = number3. 字体对话框使用 通用对话框的 ShowFont 方法可显示“字体”对话框。“字体”对话框用来为文字指定字体、大小、颜色和样式。如要使用“字体”对话框,先设置 通用对话框中与字体对话相关的属性,然后使用ShowFont 方法显示对话框。表10-2是与字体有关的属性。表10-2 与字体有关的属性4. 打印对话框通过使用通用对话框的ShowPrinter 方法可显示“打印”对话框。“打印”对话框可用以指定打印输出方式,被打印页的范围,打印质量,打印的份数等等。这个对话框还包含当前安装的打印机的信息,并允许配置或重新安装缺省打印机。这个对话框并不给打印机传送数据,只是指定希望打印数据的情况。如果 PrinterDefault 属性为 True,可以使用 Printer 对象按选定的格式打印数据。与“打印”对话框有关的属性参见表10-3。表10-3 与“打印”对话框有关的属性表10-4 与“帮助”对话框有关的属性5. 帮助对话框通用对话框的 ShowHelp 方法可运行 Windows 的帮助引擎 (WINHELP.EXE),并显示由 HelpFile 属性设定的一个帮助文件。通过 HelpCommand 属性的设置,可以告诉该帮助引擎想要哪种类型的联机帮助,比如是上下文相关,或是特定关键字的帮助,等等。与“帮助”对话框有关的属性参见表10-4。例10-1:设计一个工程,实现通用对话框的基本功能。文件对话框的形式参见图10-3。颜色对话框的形式参见图10-2。字体对话框的形式参见图10-5。1.界面设计 图10-3文件对话框的形式 图10-4 界面设计图10-5 字体对话框的形式10.1.2自定义对话框1. 自定义对话框的种类与建立通过添加窗体的方法在“添加窗体”对话框中选择“对话框”来新建一个标准的对话框,然后根据需要,用户完全可以自行设计对话框的外观和功能,这就是自定义对话框。 自定义对话框分为两种类型,即模式自定义对话框和无模式自定义对话框。表10-5 自定义对话框属性设置图10-6 自定义对话框2. 对话框的显示与卸载对话框就是一种窗体,因此可以象窗体一样进行加载、显示、隐藏和卸载。假设对话框名称为Dialog1,将该对话框显示为模式的Show方法格式为:Dialog1. Show vbModal而将该对话框显示为无模式的Show方法格式为:Dialog1. Show 要卸载或隐藏自定义对话框,可以在对话框的“确定”或“取消”命令按钮的单击事件中使用Unload方法或Hide方法。10.2 菜单程序设计在窗口环境下,绝大多数应用程序使用菜单界面进行各种操作。菜单提供了人机对话界面,方便使用者选择应用系统的各种功能。另外,通过菜单可以管理应用系统,控制应用程序各种功能模块的运行。菜单可分为下拉式菜单和弹出式菜单两种基本类型。 在 VB 中,菜单控件也是一个对象,具有定义它的外观与行为的属性。菜单控件只包含一个事件,即单击事件。图10-7 下拉式菜单的组成10.2.1 使用菜单编辑器设计菜单图10-8 菜单编辑器从菜单编器器窗口可知,菜单编器器窗口分为三个部分,即数据区、编辑区和菜单项显示区。1.数据区数据区为窗口标题栏下面的 5 行,用来输入或修改菜单项,设置属性。其中的主要项目的作用见表 10-6 。表 10-6 菜单控件的主要属性2.编辑区编辑区由 7 个按钮组成,单击右箭头将把选定的菜单向右移一个等级。单击左箭头将把选定的菜单向上移一个等级。单击上箭头将把选定的菜单项在同级菜单内向上移动一个位置。单击下箭头把选定的菜单项在同级菜单内向下移动一个位置。单击“下一个”按钮将开始一个新的菜单项。单击“插入”按钮将在某个菜单项前插入一个新的同级空白菜单项。单击“删除”按钮将删除选定的菜单项。3.菜单项列表区菜单项列表区为菜单编辑器最下面的列表框,该列表框显示菜单项的分级列表。将子菜单项缩进以指出它们的分级位置或等级。参见图 10-8 。图10-8 菜单编辑器在使用Word应用程序时经常会发现,某些菜单项会呈灰色显示,此时单击该次菜单项没有任何反映,有时菜单项的标题会发生改变。这些都可以通过在菜单设计和程序代码中加以控制。(1)有效性控制一个菜单项是否正常显示,即该菜单项是否“有效”,是由该菜单项的“有效”属性来控制的。只有该属性设置为True时,单击该菜单项才会执行相应的操作。可以在设计时设置该属性值(选中图10-8中的“有效”复选框),也可以在运行时通过执行代码加以改变。(2)可见性控制只有将菜单项的Visible属性设置为True,该菜单项才显示。可以在设计时设置该属性值(选中图10-8中的“可见”复选框),也可以在运行时通过执行代码加以改变。(3)菜单项标记菜单项标记就是在菜单项左边加上标记 表明该菜单项处于选择状态。设计时该属性可以由菜单编辑器中的“复选”(Checked)属性设置,也可以在属性窗口的“Checked”栏内设置。通常情况下,该属性时在程序运行时动态地进行设置的。任何复杂的菜单程序都遵循相同的设计方法,下面通过一个实例来说明编写菜单程序的过程。例 10-2 :某电脑销售公司销售系统界面见图10-9 ,部分菜单的内容见表 10-2 。试按表 10-7 设计菜单。10.2.2 用菜单编辑器建立菜单的实例图10-9 应用程序界面表 10-7 菜单结构1.菜单结构设计步骤(1)打开需要设计菜单的窗口。(2)打开菜单编辑器对话框(3)在图10-8所示的菜单编辑器对话框的“标题”栏输入“用户&F”(&F表示热键为F),此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MUser”,在“快捷键”下拉框内选择“None”。(4)单击“下一个”按钮,菜单项显示区的条形光标下移,同时,菜单编辑器数据区清空。在“标题”栏输入“新建&N”,此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MNew”,在“快捷键”下拉框内选择“Ctrl+N”。(5)单击编辑区的右箭头在菜单项显示区的“新建&N”左边出现符号“.”,表明“新建”是“用户”的下一级子菜单。 , (6)仿照上面的步骤,建立所有菜单项,注意各菜单之间的关系用右箭头和左箭头按钮进行调整。2.编写程序代码设计好菜单后,需要编写菜单项的Click事件过程。Private Sub dakai_Click(Index As Integer) Dim sFile As String Label1.Visible=False 隐藏Label1控件(即显示“欢迎”字样的的控件) On Error GoTo nofile 设置错误陷阱 With CommonDialog1 CommonDialog1为添加的通用对话框控件 .DialogTitle = 打开 .CancelError = False .InitDir = d: .Filter = 文本文件 |*.Txt .ShowOpen 显示“打开”对话框 If Len(.FileName) = 0 Then Exit Sub End If sFile = .FileName End Withnofile: 错误处理 If Err.Number = 32755 Then Exit Sub End If 添加处理打开的文件的代码End Sub10.2.3 菜单项的增减1.增加菜单项菜单项的增减是通过菜单控件数组实现的。菜单控件数组和普通数组一样,是通过下标来访问数组中的元素(这里为菜单项)的。菜单控件数组可以设计时建立,也可以在运行时建立。例10-3:在例10-2中,要求在程序运行时,在“文件”菜单的“退出”菜单项之上保留最近打开的文件清单。增加一个“清除”菜单项,当单击该菜单项时,将清除所有文件清单。(1)打开如图10-8所示的菜单编辑器,单击菜单列表区中的“退出”项。(2)单击“插入”按钮,清除数据区的内容。(3)在“标题”栏输入“文件清单”,在“名称”栏内输入“MdocuName”(菜单名称),输入“索引”值0以使“MdocuName”菜单项成为菜单控件数组,设置“可见”属性为False。(4)在“退出”菜单项前新增一个分隔符号,设置“可见”属性为False。(5)在“退出”菜单项前新增一个标题为“清除”、名称为Clear的菜单项,设置“有效”属性为False。(6)在窗体层定义变量menucounter控制菜单控件数组的下标。Dim menucounter As Integer(7)在“新建”和“打开”菜单项的Click事件过程中加上如下代码: menucounter = menucounter + 1 If menucounter 0 Then 当“MdocuName”菜单项不为空时,“清除”菜单项有效 Clear.Enabled = True Else Clear.Enabled = False End If 图10-10 初始菜单 图10-11 打开文件后的菜单图10-10为“MdocuName”菜单项为空的情况(即没有一个文件打开),图10-11为打开了四个文件后的情况。2.删除菜单项在运行时用load语句增加的菜单项可以使用Unload语句删除,但不能删除设计时建立的菜单项。如单击“用户 | 清除”菜单项时,删除所有打开的文件清单,可以编写如下代码:Private Sub Clear_Click() For i = 0 To menucounter - 1 Unload Mdocumenu(menucounter - i) Next MSeg14.Visible = False 删除不必要的分隔线End Sub 10.2.4 弹出菜单 弹出菜单是独立于菜单栏的浮动菜单,其在窗体上的显示位置由单击鼠标时指针的位置决定。在VB中,使用PopupMenu方法来显示弹出菜单。PopupMenu方法的语法为:对象. PopupMenu 菜单名,标志,x,y表10-8用于“标志 ” 的设置值在例10-2中,当在Form1窗体上单击鼠标右键时,要求在光标处弹出“用户”菜单,需要添加的代码为:Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu MUser, vbPopupMenuCenterAlignEnd SubPopupMenu可以适用于所有的菜单项,如有下列事件代码:Private Sub ListCPU_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu MParta, vbPopupMenuCenterAlignEnd Sub当鼠标右键单击ListCPU控件(为一个列表框控件,用于选择CPU配件)时,弹出“主要部件”子菜单,以便选择其他主要部件(打开其他配件的列表框)。MParta为主要部件子菜单的名称。 对于较为简单的应用程序,一个窗体就足够了。对于复杂的应用程序,往往需要通过多重窗体(MultiForm)来实现。每一个窗体可以有不同的界面和程序代码,以完成不同的功能。如有的窗体用来输入数据,有的窗体用来显示结果等等。多文档界面(MDI,multiple document interface)是一种典型的Windows应用程序结构。多文档界面由一个父窗体(简称MDI窗体)和一个或多个子窗体组成,MDI窗体作为子窗体的容器,子窗体包含在父窗体之内,用来显示各自的文档,所有的子窗体都具有相同的功能。10.3 多重窗体和多文档界面1.添加窗体单击“工程 | 添加窗体”命令或单击工具条上的“添加窗体”按钮 ,打开“添加窗体”对话框,单击“新建”选项卡,从列表框中选择一种新窗体的类型;或者单击“现存”选项卡,将属于其他工程的窗体添加到当前过程中。 2.与多重窗体程序设计有关的语句和方法多重窗体的操作需要在各个窗体之间进行切换,涉及到窗体的“建立”、“装入”、“显示”、“隐藏”、“删除”等操作。(1)Load语句Load语句的作用是将一个窗体装入内存,但并不显示窗体,其语法格式为:Load 窗体名称(2)Unload语句Unload语句的功能与Load语句相反,是将窗体从内存中删除。Unload语句的语法格式为:Unload 窗体名称10.3.1 多重窗体(3)Show方法Show方法的语法格式为:窗体名称.Show 模式(4)Hide方法用以隐藏窗体对象,但不能使其卸载。Hide方法的语法格式为:窗体名称.Hide隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。 3.不同窗体之间的数据交换可以在多重窗体之间存取控件或全局变量的值。4.设置启动对象在具有多个窗体的应用程序中,各个窗体之间是并列关系。程序运行时,首先执行的对象模认为第一个创建的窗口Form1,称为启动对象。根据需要可以指定其他窗体或Main子过程为启动对象。图10-12 指定启动对象5. 闲置循环与DoEvents语句VB语言属于事件驱动型语言,即只有当发生某种事件时,才执行相应的程序,否则,应用程序会处于“闲置”状态。而一旦响应某个事件时,只有在该事件执行完毕后才能响应另外的事件为了改变这种执行顺序,VB提供了闲置循环(idle loop)和DoEvents语句。DoEvents既可以作为语句使用,也可以作为函数使用,其一般格式为:窗体号 | 变量名=DoEvents() DoEvents函数DoEvents DoEvents语句例10-4:在例10-2中,增加一个Sub main过程作为启动过程,在闲置状态下,使Label1标签水平滚动,当应用程序响应其他事件,如单击“用户 | 新建”菜单项时,只要闲置事件超过一定的时间(由时钟控件Timer1的Interval属性值控制),重新执行闲置循环。(1)单击“工程 | 添加模块”,在新建的模块窗口加上如下代码:Sub main() Form1.Show Do While DoEvents() If Form1.Label1.Left Form1.ScaleWidth - 10 Then Form1.Label1.Left = Form1.ScaleLeft Else Form1.Label1.Left = Form1.Label1.Left + 1 End If LoopEnd Sub(2)新增一个时钟控件Timer1,并加上如下代码:Private Sub Timer1_Timer() Label1.Visible = TrueEnd Sub(3)在事件过程(如New_Click事件过程)中加上如下代码:Private Sub New_Click() New为“新建”菜单项的名称 Label1.Visible = FalseEnd Sub程序运行时,如果没有任何事件发生,则Label1标签水平滚动,单击任何菜单或其他按钮,Label1标签将停止水平滚动,如果事件过程中加上“Label1.Visible = False”之类的代码,则延时后继续滚动,否则立即开始滚动。下面结合实例介绍多文档界面应用程序的特点。在菜单设计一节创建了一个“电脑销售系统”的范例,在该例的基础上建立多文档界面。用户每次单击“用户”菜单下的“新建”命令,将显示一个新的Form1类的窗口,该窗口中的文本框显示用户配置情况。用户单击“部件”菜单下的不同的命令,将打开不同的对话框,供用户选择不同的配件,用户的选择将显示在文本框中。 图10-13 多文档界面 图10-14 三种形式的窗体10.3.2 多文档界面1.建立多文档界面的基本步骤(1)创建和设计MDI父窗体(2)创建和设计MDI子窗体如下面的newclient子过程运行时创建Form1窗体。Public Sub newclient() Dim newform1 As New Form1, name As String 在这里添加将自定义记录类型变量Clientnumber 清零,该变量保存客户资料 Form1.Hide name = InputBox(请输入姓名, 客户名称) If name Then MDIForm1.Picture1.Visible = False newform1.Show clientnumber.clientname = name MDIForm1.ActiveForm.Text1.Text = name + vbCrLf End IfEnd Sub(3)MDI子窗体的特性在设计阶段,子窗体独立于父窗体,与普通的VB窗体没有任何区别,可以在子窗体上增加控件、设置属性、编写代码。在运行期间,MDI窗体及其子窗体具有如下特性:1)所有子窗体都只能在MDI窗体内部进行调整,不能超出MDI窗体之外。2)最小化的子窗体出现在MDI窗体上,并不在桌面的任务栏上显示。最小化MDI窗体时,MDI窗体在任务栏上显示为图标。3)在子窗体处于最小化和最大化之间时,每个子窗体都有自己的标题(参见图10-13),当子窗体最大化时,其标题与MDI窗体的标题合并,并显示在MDI窗体的标题栏上。4)将MDI窗体的AutoShowChildren属性设置为True,可以使子窗体在装入时自动显示。5)活动子窗体的菜单将显示在MDI窗体上,而不是子窗体上。2.MDI窗体上的控制区MDI窗体分为两部分,其中上面一部分称为控制区,下面一部分称为工作区。建立了MDI父窗体、子窗体,确定了启动窗体并建立了控制区后,就可以根据需要编写程序代码了。MDI父窗体的控制区及各个子窗体内都可以建立控件,可以像单一窗体一样编写程序代码。图10-15 在MDI窗体上建立控制区3.MDI窗体和子窗体之间的交互(1)设置活动子窗体和活动控件在MDI窗体上显示的子窗体不止一个时,可以通过 ActiveForm属性得到或指定哪一个子窗体为活动的。在newclient子过程中的语句MDIForm1.ActiveForm.Text1.Text =name + vbCrLf即表示为MDIForm1父窗体中最后一个获得焦点的子窗体的文本框设置Text属性值。同样,当在一个窗体上显示的控件不止一个时,可以通过 ActiveControl属性得到或指定哪一个控件为得到焦点的控件。 4.窗体显示与QueryUnload事件(1)窗体显示当MDI窗体为启动窗体时,子窗体不能自动装入,当子窗体为启动窗体时,MDI窗体自动装入。(2)QueryUnload事件为了避免随着父窗体的关闭而使所有的子窗体结束,造成子窗体内容的丢失,VB提供了QueryUnload事件。下面是QueryUnload事件的实例:Private Sub MDI父窗体名|子窗体名Form_QueryUnload (Cancel As Integer, UnloadMode As Integer) Dim Msg 声明变量。 If UnloadMode 0 Then 如果正在退出应用程序 Msg = 你真想退出应用程序吗? FileSaveProc 调用保存数据的过程FileSaveProc Else 如果正在关闭窗体 Msg = 你真想关闭窗体吗? End If 如果用户单击No按钮,则停止QueryUnload。 If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True End Sub 表10-9 UnloadMode参数的取值 表10-10 Arrange方法的方式设置值5. 窗体排列Arrange方法用以重排 MDIForm 对象中的窗口或图标,如上述工程的“窗口”菜单下即为排列窗口的命令,其中“垂直排列”单击事件为:Private Sub Varrange_Click()MDIForm1.Arrange 2End Sub其中:“2”为排列方式参数,其余方式参数设置值参见表10-10。6. MDI应用程序中的菜单在MDI应用程序中,菜单可以建立在父窗体上,也可以建立在子窗体上,也可以分别建立。每个子窗体的菜单在MDl父窗体上显示,而不是在子窗体本身显示。当一个子窗体为活动窗(即有焦点)时,如果该子窗体的有菜单,则该菜单将取代MDI窗体菜单条上的菜单。如果没有可见的子窗体,或者有焦点的子窗体没有菜单,则显示MDI父窗体的菜单。通过把某个菜单的WindowList属性设置为True,可以用MDI窗体或子窗体上的任何菜单显示已打开的子窗体的列表。设置WindowList属性的步骤如下:(1)选择要显示菜单的窗体(父窗体或子窗体),执行“工具“菜单中的“菜单编辑器”命令 , 打开“菜单编辑器”窗口。(2)在菜单项显示区中,选择要将窗体列表显示在其中的菜单,如“用户”菜单。(3)选择“显示窗口列表”(WindowList)复选框。在运行期间,这个菜单显示打开的子窗体的列表,同时,这个菜单的WindowList属性作为True返回。10.4 工具条和状态栏命令条将菜单及工具栏的概念统一成为一个一般性的、可视的、可编程的对象。作为命令条,菜单包含了具有图标和标题的菜单命令,并且在保持大家熟悉的菜单格式的同时还表现出类似于按钮的特性。有些工具栏按钮与组合框控件类似,带有下拉箭头。某些类型的命令条对象可以包括其它的命令条对象。状态栏StatusBar控件用来显示各种信息。为了使用上述控件,应首先打开“部件”对话框,选中“Microsoft Windows Common Controls6.0”,将控件添加到VB工具箱中。参见图10-16下面三行。制作工具条有两种方法:(1)手工制作:利用图形框和命令按钮,这种方法比较繁琐。(2)通过ToolBar、ImageList控件制作。图10-16 工具箱(1)执行“工程”菜单中的“添加MDI窗体”命令,建立个MDI窗体。(2)在MDI窗体上画一个ToolBar控件、在ToolBar控件上画一个ImageList控件。(3)在ImageList控件中添加图像。(4)在ToolBar控件中添加按钮。10.4.1 在MDI窗体上建立工具条的一般步骤1. 在ImageList控件中添加图像(1)ImageList控件ImageList 控件包含 ListImage 对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。如工具栏控件(ToolBar)中的图像就是从ImageList 控件中获取的。(2)在ImageList控件中添加图像在ToolBar控件上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择“属性”命令,打开如图10-17所示“属性页”对话框,选择其中的“图像” 选项卡。图10-17 ImageList控件属性页之“图像”选项卡2. 在ToolBar控件中添加按钮(1)ToolBar控件ToolBar控件包含一个按钮对象集合,该对象被用来创建与应用程序相关联的工具栏。工具栏包含一些按钮,这些按钮与应用程序菜单中各项的按钮对应,工具栏为用户访问应用程序的最常用功能和命令提供了图形接口。(2)为工具栏连接按钮右键单击Toolbar控件,选择“属性”命令打开如图10-18所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。图10-18 ToolBar控件“属性页”(3)为工具栏增加按钮打开“属性页”上的“按钮”选项卡(参见图10-19),单击“插入按钮”,可以在工具栏上插入按钮。图10-19 Toolbar控件“按钮”选项卡图10-20 工具栏实例表10-12 按钮样式3. 响应Toolbar控件的事件Toolbar控件的主要事件有ButtonClick 事件(对应按钮样式0-2)和ButtonMenuClick 事件(对应按钮样式5)。由于工具栏上的按钮为控件数组,故既可以用索引(Index属性),也可以用
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。