第10章 界面设计 10.1 对话框控件 10.2 菜单程序设计 10.3 多重窗体和多文档界面 10.4 工具条和状态栏

Slides:



Advertisements
Similar presentations
第七章 常用控件 7.1 控件概述 7.2 常用内部控件 本章要求 返回目录 第七章 常用控件 (Common Control)
Advertisements

第二章 VB的编程机制 【授课时间】第3周,第2次课 【授课题目】 2.1 面向对象程序设计概述 2.2 VB中的对象
計算機概論 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 演算法與流程圖 4-3 視窗程式語言設計 4-4 資料結構.
計算機程式及實習 期末報告 題目:商店結帳系統
第10章 处理图形 Visual Basic 程序设计教程.
課程名稱:程式設計 授課老師:________
第四章 控制结构.
Visual Basic 2005學習範本 第5章 選擇結構.
1.了解VB6.0的功能特点 、集成环境。 2.理解面向对象程序设计的几个概念。 3.掌握VB应用程序设计的步骤。
客户端用Net-Library和SQL SERVER连接
課程名稱:程式設計 授課老師:________
VB教学中游戏化教学案例设计.
网 络 课 程 马 鞍 学 网 络 山 课 程 大 络 网 Visual Basic程序设计 第 一 讲 最容易接受的编程语言
第五章 数组.
VBA应用开发与实例 李 辉 微软课程培训讲师. VBA应用开发与实例 李 辉 微软课程培训讲师.
Visual Basic程序设计.
程式簡介、VB、物件導向 國立北門高中 林明璋.
課程名稱:程式設計 授課老師:________
Chapter 1 複習.
Visual Basic 2010 程式設計16堂特訓 第七堂 VB的迴圈流程控制.
第6章 数 组 6.1 一维数组 6.2 控件数组 6.3 二维数组.
第10章VBA会计应用与实践 第11章会计凭证管理模块设计与实现
程式語言 -Visual Basic 變數、常數與資料型態.
过程 第 7 章.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
第十一讲 VB常用标准控件(2).
國立台灣大學電機工程研究所 Visual Basic 程式設計 國立台灣大學電機工程研究所.
初识Visual Basic.
第一章 VB概述 本章重点和难点 1.1 VB 概述 1.2 面向对象的程序设计方法基础
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
Visual Basic程序设计基础 计算机科学学院.
第十三章 檔案.
第9章 访问数据库 9.1 数据库的概念与建立 9.2 用Data控件访问数据库.
Access VBA程序设计 本章重点 Access Basic编程语言 运算符、函数与表达式 Access Basic语句 模块的使用
第4章 程序控制结构与算法基础.
計算機程式 廖文淵 Department of Computer Science and Engineering
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
Visual Basic 程序设计教程 机械工业出版社同名教材 配套电子教案 2003 年 6月.
第4章 基本的控制结构 4.1 顺序结构 4.2 选择结构程序设计 4.3 循环结构 4.4 综合实例 退出.
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
第十二章 多模組與多專案.
程式設計 Visual Basic簡介 週次:1 建國技術學院 資管系 饒瑞佶 2003年9月17日.
第12章 VBA模块设计.
PCR300 (13.56MHz) Reader RS232/USB.
Ch03 基本輸出入介面設計 視窗程式設計 授課教師:王大瑾.
第四章 命令按钮、标签和文本框 大多数应用程序中都有命令按钮CommandButton控件,用户可以单击按钮执行某项操作。
Visual Basic程序设计.
高等学校计算机基础教育教材 Visual Basic 6.0 程序设计 上海中医药大学现代教育技术中心 计算机教学部 1.
第二章 创建用户界面 本章重点和难点 2.1 基本属性 2.2 创建窗体 2.3 Visual Basic的常用控件 2.4 制作菜单.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
算法与程序设计 周少品.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
Visual Basic.NET 程序设计语言课程内容
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
第11章 实用扩展控件 11.1 RichTextBox控件 11.2 TreeView和ListView控件 11.3 其他扩展控件 结束.
程式語言(I)- Visual Basic 6.0 第 8 章 模組化程式設計I-副程式與自定函數.
第五章: 輸入與輸出.
VB语言程序设计教程.
小结 郭清溥.
第9章 创建与使用菜单、工具栏和状态栏 大多数基于Windows的应用程序均使用菜单、工具 栏和状态栏。其中,用户通过菜单及工具栏实现 各种期望地操作;使用状态栏获得系统以及软件 的状态信息。本章将带领读者学习如何创建与使 用这些控件。
第二章、第三章错题分析.
第 11 章 功能表列與工具列的設計 & 第 10 章 檔案.
Visual Basic 程序设计及应用教程 (6.0版)
选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。
计算机应用基础 潍坊学院 计算机工程学院 主讲人:丁素英.
程式設計 Visual Basic簡介 週次:4 建國技術學院 資管系 饒瑞佶 2003年10月18日.
第5章 数组 5.1 数组概述 5.2 静态数组和动态数组 5.3 数组的基本操作 5.4 控件数组 5.5 数组在自定义数据类型中的应用.
1、复选框和单选按钮 2、框架 3、列表框和组合框 4、滚动条 5、鼠标器事件 6、键盘
程序调试与错误处理.
Presentation transcript:

第10章 界面设计 10.1 对话框控件 10.2 菜单程序设计 10.3 多重窗体和多文档界面 10.4 工具条和状态栏 第10章 界面设计 10.1 对话框控件 10.2 菜单程序设计 10.3 多重窗体和多文档界面 10.4 工具条和状态栏 10.5 RichTextBox 控件 10.6 应用程序向导 退出

10.1 对话框控件 10.1.1通用对话框 通用对话框控件(CommonDialog)提供一组标准的操作对话框来返回信息。 10.1 对话框控件 10.1.1通用对话框 通用对话框控件(CommonDialog)提供一组标准的操作对话框来返回信息。 可以在“部件”对话框中通过选中“Microsoft Common Dialog Control 6.0”在工具箱中添加通用对话框控件。设计时在窗体上绘制的通用对话框不能改变大小,运行时控件被隐藏,可以通过设置不同Action属性值和使用不同的方法来决定对话框的类型。 表10-1 CommonDialog 控件提供的对话框 所显示的对话框 方法 Action属性值 显示“打开”对话框 ShowOpen 1 显示“另存为”对话框 ShowSave 2 显示“颜色”对话框 ShowColor 3 显示“字体”对话框 ShowFont 4 显示“打印”或“打印选项”对话框 ShowPrinter 5 调用 Windows 帮助引擎 ShowHelp 6

Action属性只能在程序中赋值,而不能在属性窗口进行设置。通用对话框的其他共同属性有: (1)CancelError 属性 在通用对话框内有一个“确定”按钮和一个“取消”按钮,前者表示确认,后者表示放弃。 (2)DialogTitle 属性 设置对话框标题栏所显示的字符串。 (3)Flags属性 Flags属性用来修改通用对话框的每个具体对话框的默认设置。 通用对话框的属性除了在属性窗口和程序代码中设置外,还可以在其“属性页”对话框中设置。右键单击窗体上通用对话框控件,从弹出的快捷菜单中选择“属性”命令即可打开“属性页”对话框。 1. 文件对话框 使用ShowOpen方法或ShowSave方法显示的“打开”文件对话框或“另存为”文件对话框,尽管作用不一样,但其外观及其属性基本一致,与熟悉的Word界面的“打开”文件对话框或“另存为”文件对话框的外观和作用类似。

为对话框设置缺省的文件扩展名,如 .txt 或 .doc。 (2)FileName 属性 设置所选文件的路径和文件名。 文件对话框的主要属性有: (1)DefaultExt 属性 为对话框设置缺省的文件扩展名,如 .txt 或 .doc。 (2)FileName 属性 设置所选文件的路径和文件名。 (3)FileTitle 属性 设置要打开或保存文件的名称(没有路径)。 (4)Filter 属性(公共对话框) 设置在对话框的类型列表框中所显示的过滤器(即限定的文件类型)。其语法格式为:object.Filter [= description1 |filter1 |description2 |filter2...] (5)InitDir属性 该属性用来指定文件对话框中的初始目录,如果该属性没有指定,则使用当前目录。 图10-1 打开文件对话框

Color 属性用来设置或返回选定的颜色。其语法格式为: object.Color [= number] 2. 颜色对话框 通过使用通用对话框的 ShowColor 方法可显示“颜色”对话框。“颜色”对话框用以从调色板选择颜色,或是生成和选择自定义颜色。使用“颜色”对话框前先设置通用对话框控件中与颜色对话相关的属性,然后使用 ShowColor 方法显示对话框,使用 Color 属性检索所选的颜色。 Color 属性用来设置或返回选定的颜色。其语法格式为: object.Color [= number] 图10-2 通用对话框控件(“颜色”对话框)

使用 通用对话框的 ShowFont 方法可显示“字体”对话框。“字体”对话框用来为文字指定字体、大小、颜色和样式。 3. 字体对话框 使用 通用对话框的 ShowFont 方法可显示“字体”对话框。“字体”对话框用来为文字指定字体、大小、颜色和样式。 如要使用“字体”对话框,先设置 通用对话框中与字体对话相关的属性,然后使用ShowFont 方法显示对话框。表10-2是与字体有关的属性。 表10-2 与字体有关的属性 属性 作 用 Color 选定的颜色。如要使用这个属性,必须先将 Flags 属性设置为 vbCFEffects。 FontBold 是否选定了粗体。 FontItalic 是否选定了斜体。 FontStrikethru 是否选定删除线。如要使用这个属性,必须先将 Flags 属性设置为 vbCFEffects。 FontUnderline 是否选定下划线。如要使用这个属性,必须先将 Flags 属性设置为 vbCFEffects。 FontName 选定字体的名称。 FontSize 选定字体的大小。 Max、Min 指定字体大小范围,如要使用这个属性,必须先将 Flags 属性设置为vbCFLimitSize。

4. 打印对话框 通过使用通用对话框的ShowPrinter 方法可显示“打印”对话框。“打印”对话框可用以指定打印输出方式,被打印页的范围,打印质量,打印的份数等等。这个对话框还包含当前安装的打印机的信息,并允许配置或重新安装缺省打印机。这个对话框并不给打印机传送数据,只是指定希望打印数据的情况。如果 PrinterDefault 属性为 True,可以使用 Printer 对象按选定的格式打印数据。 与“打印”对话框有关的属性参见表10-3。 表10-3 与“打印”对话框有关的属性 属性 作 用 Copies 打印的份数 FromPage 开始打印页 ToPage 结束打印页 hDC 分配给打印机的句柄,用于识别对象的设备环境,用于API调用 Max,Min 设置打印范围允许的最大和最小值 PrinterDefault 确定在“打印”对话框中的选择是否用于改变系统缺省的打印机设置

通过 HelpCommand 属性的设置,可以告诉该帮助引擎想要哪种类型的联机帮助,比如是上下文相关,或是特定关键字的帮助,等等。 5. 帮助对话框 通用对话框的 ShowHelp 方法可运行 Windows 的帮助引擎 (WINHELP.EXE),并显示由 HelpFile 属性设定的一个帮助文件。 通过 HelpCommand 属性的设置,可以告诉该帮助引擎想要哪种类型的联机帮助,比如是上下文相关,或是特定关键字的帮助,等等。 与“帮助”对话框有关的属性参见表10-4。 表10-4 与“帮助”对话框有关的属性 属性 作 用 HelpCommand 返回或设置需要的联机帮助的类型 HelpFile 确定 Microsoft Windows Help 文件的路径和文件名,应用程序使用这个文件显示 Help 或联机文档 HelpKey 返回或设置标识请求的帮助主题的关键字 HelpContextID 为一个对象返回或设置一个相关联上下文的编号。它被用来为应用程序提供上下文有关的帮助

例10-1:设计一个工程,实现通用对话框的基本功能。文件对话框的形式参见图10-3。颜色对话框的形式参见图10-2。字体对话框的形式参见图10-5。 1.界面设计 图10-3文件对话框的形式 图10-4 界面设计 图10-5 字体对话框的形式

10.1.2自定义对话框 1. 自定义对话框的种类与建立 通过添加窗体的方法在“添加窗体”对话框中选择“对话框”来新建一个标准的对话框,然后根据需要,用户完全可以自行设计对话框的外观和功能,这就是自定义对话框。 自定义对话框分为两种类型,即模式自定义对话框和无模式自定义对话框。 表10-5 自定义对话框属性设置 属性 属性值 说明 BorderStyle 1 边框固定,以防运行时改变对话框尺寸 ConrolBox Fasle 取消控制菜单 MaxButton 取消最大化按钮 MinButton 取消最小化按钮

图10-6 自定义对话框

2. 对话框的显示与卸载 对话框就是一种窗体,因此可以象窗体一样进行加载、显示、隐藏和卸载。 假设对话框名称为Dialog1,将该对话框显示为模式的Show方法格式为: Dialog1. Show vbModal 而将该对话框显示为无模式的Show方法格式为: Dialog1. Show 要卸载或隐藏自定义对话框,可以在对话框的“确定”或“取消”命令按钮的单击事件中使用Unload方法或Hide方法。

10.2 菜单程序设计 在窗口环境下,绝大多数应用程序使用菜单界面进行各种操作。菜单提供了人机对话界面,方便使用者选择应用系统的各种功能。另外,通过菜单可以管理应用系统,控制应用程序各种功能模块的运行。 图10-7 下拉式菜单的组成 菜单可分为下拉式菜单和弹出式菜单两种基本类型。 在 VB 中,菜单控件也是一个对象,具有定义它的外观与行为的属性。菜单控件只包含一个事件,即单击事件。

10.2.1 使用菜单编辑器设计菜单 从菜单编器器窗口可知,菜单编器器窗口分为三个部分,即数据区、编辑区和菜单项显示区。 10.2.1 使用菜单编辑器设计菜单 图10-8 菜单编辑器 从菜单编器器窗口可知,菜单编器器窗口分为三个部分,即数据区、编辑区和菜单项显示区。

数据区为窗口标题栏下面的 5 行,用来输入或修改菜单项,设置属性。其中的主要项目的作用见表 10-6 。 1.数据区 数据区为窗口标题栏下面的 5 行,用来输入或修改菜单项,设置属性。其中的主要项目的作用见表 10-6 。 表 10-6 菜单控件的主要属性 属性 说 明 标题 相当于控件的说明属性,这些名字出现在菜单条或菜单之中。分隔符条的标题为一个连字符 (-) 。 名称 为菜单项的标识符,相当于控件的名字属性,仅用于访问代码中的菜单项,不会出现在菜单中 索引 设置菜单控件数组的下标。相当于控件数组的德索引属性 快捷键 允许为每个命令选定快捷键,即通过键盘来选择某个菜单项 复选 当 "复选" 属性设置为True 时,在相应的菜单项旁加上 "√" 以表明该菜单项处于活动状态 有效 用来设置菜单项的操作状态,当该属性设置为False时,相应的菜单项呈灰色,表明不会相应用户事件 可见 设置该菜单项是否可见。不可见的菜单项时不能被执行的 协调位置 NegotiatePosition 属性决定是否及如何在容器窗体中显示菜单 “显示窗口列表” 在 MDI 应用程序中,确定菜单控件是否包含一个打开的 MDI 子窗体列表

2.编辑区 编辑区由 7 个按钮组成,单击右箭头将把选定的菜单向右移一个等级。单击左箭头将把选定的菜单向上移一个等级。单击上箭头将把选定的菜单项在同级菜单内向上移动一个位置。单击下箭头把选定的菜单项在同级菜单内向下移动一个位置。单击“下一个”按钮将开始一个新的菜单项。单击“插入”按钮将在某个菜单项前插入一个新的同级空白菜单项。单击“删除”按钮将删除选定的菜单项。

3.菜单项列表区 菜单项列表区为菜单编辑器最下面的列表框,该列表框显示菜单项的分级列表。将子菜单项缩进以指出它们的分级位置或等级。参见图 10-8 。 图10-8 菜单编辑器

在使用Word应用程序时经常会发现,某些菜单项会呈灰色显示,此时单击该次菜单项没有任何反映,有时菜单项的标题会发生改变。这些都可以通过在菜单设计和程序代码中加以控制。 (1)有效性控制 一个菜单项是否正常显示,即该菜单项是否“有效”,是由该菜单项的“有效”属性来控制的。只有该属性设置为True时,单击该菜单项才会执行相应的操作。可以在设计时设置该属性值(选中图10-8中的“有效”复选框),也可以在运行时通过执行代码加以改变。 (2)可见性控制 只有将菜单项的Visible属性设置为True,该菜单项才显示。可以在设计时设置该属性值(选中图10-8中的“可见”复选框),也可以在运行时通过执行代码加以改变。 (3)菜单项标记 菜单项标记就是在菜单项左边加上标记 表明该菜单项处于选择状态。设计时该属性可以由菜单编辑器中的“复选”(Checked)属性设置,也可以在属性窗口的“Checked”栏内设置。通常情况下,该属性时在程序运行时动态地进行设置的。

10.2.2 用菜单编辑器建立菜单的实例 任何复杂的菜单程序都遵循相同的设计方法,下面通过一个实例来说明编写菜单程序的过程。 10.2.2 用菜单编辑器建立菜单的实例 任何复杂的菜单程序都遵循相同的设计方法,下面通过一个实例来说明编写菜单程序的过程。 例 10-2 :某电脑销售公司销售系统界面见图10-9 ,部分菜单的内容见表 10-2 。试按表 10-7 设计菜单。 图10-9 应用程序界面

表 10-7 菜单结构 标题 名称 上级菜单标题 热键 快捷键 有无对话框 用户 MUser 无 F — 新建 MNew N Ctrl+N 打开 MOpen O Ctrl+O - MSeg1 保存 MSave S Ctrl+S 另存为 MSaveother A MSeg2 配置预览 MPreview R 打印 MPrint P MSeg3 退出 MExit E 编辑 MEdit 部件 MPart 工具 MTool T 帮助 MHelp H

(5)单击编辑区的右箭头在菜单项显示区的“新建&N”左边出现符号“....”,表明“新建”是“用户”的下一级子菜单。 1.菜单结构设计步骤 (1)打开需要设计菜单的窗口。 (2)打开菜单编辑器对话框 (3)在图10-8所示的菜单编辑器对话框的“标题”栏输入“用户&F”(&F表示热键为F),此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MUser”,在“快捷键”下拉框内选择“None”。 (4)单击“下一个”按钮,菜单项显示区的条形光标下移,同时,菜单编辑器数据区清空。在“标题”栏输入“新建&N…”,此时在菜单项显示区出现键入的内容,在“名称”栏内输入“MNew”,在“快捷键”下拉框内选择“Ctrl+N”。 , (5)单击编辑区的右箭头在菜单项显示区的“新建&N”左边出现符号“....”,表明“新建”是“用户”的下一级子菜单。 (6)仿照上面的步骤,建立所有菜单项,注意各菜单之间的关系用右箭头和左箭头按钮进行调整。

设计好菜单后,需要编写菜单项的Click事件过程。 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 ' 添加处理打开的文件的代码 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 < 5 Then MSeg4.Visible = True ' MSeg14为“退出”菜单项前面的分隔线名称 Load MdocuName(menucounter) ' 装入新的菜单项 MdocuName(menucounter).Caption = CommonDialog1.FileName ' 设置新菜单项的标题 MdocuName(menucounter).Visible = True ' 显示新的菜单项(即新的文件清单) Else i = menucounter Mod 4 ' 超过4个文件清单时将刷新菜单控件的第i个标题 If i = 0 Then i = 4 MdocuName(i).Caption = CommonDialog1.FileName End If If menucounter > 0 Then ' 当“MdocuName”菜单项不为空时,“清除”菜单项有效 Clear.Enabled = True Clear.Enabled = False

图10-10为“MdocuName”菜单项为空的情况(即没有一个文件打开),图10-11为打开了四个文件后的情况。 图10-10 初始菜单 图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 弹出菜单 弹出菜单是独立于菜单栏的浮动菜单,其在窗体上的显示位置由单击鼠标时指针的位置决定。 10.2.4 弹出菜单 弹出菜单是独立于菜单栏的浮动菜单,其在窗体上的显示位置由单击鼠标时指针的位置决定。 在VB中,使用PopupMenu方法来显示弹出菜单。PopupMenu方法的语法为: [对象.] PopupMenu 菜单名,标志,x,y 表10-8用于“标志 ” 的设置值 常数位置 值 描述 vbPopupMenuLeftAlign 缺省值。弹出式菜单的左边定位于 x。 vbPopupMenuCenterAlign 4 弹出式菜单以 x为居中心。 vbPopupMenuRightAlign 8 弹出式菜单的右边定位于 x。 常数行为 vbPopupMenuLeftButton 缺省值。 仅当使用鼠标左按钮时, 弹出式菜单中的项目才响应鼠标单击。 vbPopupMenuRightButton 2 不论使用鼠标右按钮还是左按钮, 弹出式菜单中的项目都响应鼠标单击。

在例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 当鼠标右键单击ListCPU控件(为一个列表框控件,用于选择CPU配件)时,弹出“主要部件”子菜单,以便选择其他主要部件(打开其他配件的列表框)。MParta为主要部件子菜单的名称。

10.3 多重窗体和多文档界面 对于较为简单的应用程序,一个窗体就足够了。对于复杂的应用程序,往往需要通过多重窗体(MultiForm)来实现。每一个窗体可以有不同的界面和程序代码,以完成不同的功能。如有的窗体用来输入数据,有的窗体用来显示结果等等。 多文档界面(MDI,multiple document interface)是一种典型的Windows应用程序结构。多文档界面由一个父窗体(简称MDI窗体)和一个或多个子窗体组成,MDI窗体作为子窗体的容器,子窗体包含在父窗体之内,用来显示各自的文档,所有的子窗体都具有相同的功能。

10.3.1 多重窗体 1.添加窗体 单击“工程 | 添加窗体”命令或单击工具条上的“添加窗体”按钮 ,打开“添加窗体”对话框,单击“新建”选项卡,从列表框中选择一种新窗体的类型;或者单击“现存”选项卡,将属于其他工程的窗体添加到当前过程中。 2.与多重窗体程序设计有关的语句和方法 多重窗体的操作需要在各个窗体之间进行切换,涉及到窗体的“建立”、“装入”、“显示”、“隐藏”、“删除”等操作。 (1)Load语句 Load语句的作用是将一个窗体装入内存,但并不显示窗体,其语法格式为: Load 窗体名称 (2)Unload语句 Unload语句的功能与Load语句相反,是将窗体从内存中删除。Unload语句的语法格式为: Unload 窗体名称

(3)Show方法 Show方法的语法格式为: [窗体名称.]Show [模式] (4)Hide方法 用以隐藏窗体对象,但不能使其卸载。Hide方法的语法格式为: [窗体名称.]Hide 隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。 窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。 如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。

可以在多重窗体之间存取控件或全局变量的值。 4.设置启动对象 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 (3)在事件过程(如New_Click事件过程)中加上如下代码: Private Sub New_Click() ' New为“新建”菜单项的名称 Label1.Visible = False 程序运行时,如果没有任何事件发生,则Label1标签水平滚动,单击任何菜单或其他按钮,Label1标签将停止水平滚动,如果事件过程中加上“Label1.Visible = False”之类的代码,则延时后继续滚动,否则立即开始滚动。

10.3.2 多文档界面 下面结合实例介绍多文档界面应用程序的特点。 10.3.2 多文档界面 下面结合实例介绍多文档界面应用程序的特点。 在菜单设计一节创建了一个“电脑销售系统”的范例,在该例的基础上建立多文档界面。用户每次单击“用户”菜单下的“新建”命令,将显示一个新的Form1类的窗口,该窗口中的文本框显示用户配置情况。用户单击“部件”菜单下的不同的命令,将打开不同的对话框,供用户选择不同的配件,用户的选择将显示在文本框中。 图10-13 多文档界面 图10-14 三种形式的窗体

如下面的newclient子过程运行时创建Form1窗体。 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窗体上,而不是子窗体上。

MDI窗体分为两部分,其中上面一部分称为控制区,下面一部分称为工作区。 建立了MDI父窗体、子窗体,确定了启动窗体并建立了控制区后,就可以根据需要编写程序代码了。MDI父窗体的控制区及各个子窗体内都可以建立控件,可以像单一窗体一样编写程序代码。

3.MDI窗体和子窗体之间的交互 (1)设置活动子窗体和活动控件 在MDI窗体上显示的子窗体不止一个时,可以通过 ActiveForm属性得到或指定哪一个子窗体为活动的。 在newclient子过程中的语句 MDIForm1.ActiveForm.Text1.Text =name + vbCrLf 即表示为MDIForm1父窗体中最后一个获得焦点的子窗体的文本框设置Text属性值。 同样,当在一个窗体上显示的控件不止一个时,可以通过 ActiveControl属性得到或指定哪一个控件为得到焦点的控件。

当MDI窗体为启动窗体时,子窗体不能自动装入,当子窗体为启动窗体时,MDI窗体自动装入。 (2)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参数的取值 常数 值 描述 vbFormControlMenu 用户从窗体上的“控件”菜单中选择“关闭”指令。 vbFormCode 1 Unload 语句被代码调用。 vbAppWindows 2 当前 Microsoft Windows 操作环境会话结束。 vbAppTaskManager 3 Microsoft Windows 任务管理器正在关闭应用程序。 vbFormMDIForm 4 MDI 子窗体正在关闭,因为 MDI 窗体正在关闭。

Arrange方法用以重排 MDIForm 对象中的窗口或图标,如上述工程的“窗口”菜单下即为排列窗口的命令,其中“垂直排列”单击事件为: 5. 窗体排列 Arrange方法用以重排 MDIForm 对象中的窗口或图标,如上述工程的“窗口”菜单下即为排列窗口的命令,其中“垂直排列”单击事件为: Private Sub Varrange_Click() MDIForm1.Arrange 2 End Sub 其中: “2”为排列方式参数,其余方式参数设置值参见表10-10。 表10-10 Arrange方法的方式设置值 常数 值 描述 vbCascade 层叠所有非最小化 MDI 子窗体。 vbTileHorizontal 1 水平平铺所有非最小化 MDI 子窗体。 vbTileVertical 2 垂直平铺所有非最小化 MDI 子窗体。 vbArrangeIcons 3 重排最小化 MDI 子窗体的图标。

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 工具箱

10.4.1 在MDI窗体上建立工具条的一般步骤 (1)执行“工程”菜单中的“添加MDI窗体”命令,建立—个MDI窗体。 (2)在MDI窗体上画一个ToolBar控件、在ToolBar控件上画一个ImageList控件。 (3)在ImageList控件中添加图像。 (4)在ToolBar控件中添加按钮。

1. 在ImageList控件中添加图像 (1)ImageList控件 ImageList 控件包含 ListImage 对象的集合,该集合中的每个对象都可以通过其索引或关键字被引用。ImageList 控件不能独立使用,只是作为一个便于向其它控件提供图象的资料中心。如工具栏控件(ToolBar)中的图像就是从ImageList 控件中获取的。 (2)在ImageList控件中添加图像 在ToolBar控件上添加ImageList控件(如ImageList1控件)后,用右键单击ImageList1控件,在弹出的快捷菜单中选择“属性”命令,打开如图10-17所示“属性页”对话框,选择其中的“图像” 选项卡。 图10-17 ImageList控件属性页之“图像”选项卡

右键单击Toolbar控件,选择“属性”命令打开如图10-18所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。 (2)为工具栏连接按钮 右键单击Toolbar控件,选择“属性”命令打开如图10-18所示的Toolbar 控件“属性页”对话框,选择“通用”选项卡。 图10-18 ToolBar控件“属性页”

打开“属性页”上的“按钮”选项卡(参见图10-19),单击“插入按钮”,可以在工具栏上插入按钮。 (3)为工具栏增加按钮 打开“属性页”上的“按钮”选项卡(参见图10-19),单击“插入按钮”,可以在工具栏上插入按钮。 表10-12 按钮样式 值 常数 按钮 说明 tbrDefault 普通按钮 按下按钮后恢复原状,如“新建”按钮 1 tbrCheck 开关按钮 按下按钮后保持按下状态,如“加粗”等按钮 2 tbrButtonGroup 编组按钮 在一组按钮中只能有一个有效,如对齐方式按钮 3 tbrSepatator 分隔按钮 将左右按钮分隔开 4 tbrPlaceholder 占位按钮 用来安放其它按钮,可以设置其宽度(width) 5 tbrdropdown 菜单按钮 具有下拉菜单,如Word中的“字符缩放”按钮 图10-20 工具栏实例 图10-19 Toolbar控件“按钮”选项卡

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)

10.4.2 状态栏(StatusBar 控件) 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-13 状态栏的Style属性 图10-22即为设计好的状态栏,包括6个面板。 图10-21 状态栏“窗格”选项卡 常数 值 描述 数表示)。 图10-22即为设计好的状态栏,包括6个面板。 表10-13 状态栏的Style属性 图10-21 状态栏“窗格”选项卡 常数 值 描述 sbrText (缺省)。文本和/或位图。用 Text 属性设置文本。 sbrCaps 1 Caps Lock 键。当激活 Caps Lock 时,用黑体显示字母 CAPS,反之,当停用 Caps Lock 时,显示暗淡的字母。 sbrNum 2 Number Lock。当激活数字锁定键时,用黑体显示字母 NUM,反之,当停用数字锁定键时,显示暗淡的字母。 sbrIns 3 Insert 键。当激活插入键时,用黑体显示字母 INS。反之,当停用插入键时,显示暗淡的字母。 sbrScrl 4 Scroll Lock 键。当激活滚动锁定时,用黑体显示字母 SCRL,反之,当停用滚动键时,显示暗淡的字母。 sbrTime 5 Time。以系统格式显示当前时间。 sbrDate 6 Date。以系统格式显示当前日期。 sbrKana 7 Kana。当激活滚动锁定时,用黑体显示字母 KANA。反之,当滚动锁定停用时,显示暗淡的字母。 图10-22 状态栏实例

10.5 RichTextBox 控件 10.5.1 RichTextBox 控件 RichTextBox 控件不仅允许输入和编辑文本,同时还提供了标准 TextBox 控件不具有的、更高级的指定格式的许多功能。 10.6.2 用 LoadFile 和 SaveFile 方法打开和保存文件 用 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.3 RichTextBox控件的格式化属性 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

10.5.5 在RichTextBox控件中嵌入对象 1. 将对象拖动到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.6 应用程序向导 在VB中,提供了称为“应用程序向导”的程序生成器,可以用来方便地生成应用程序的界面。 图10-24 利用应用程序向导创建的应用程序界面实例 图10-25 “应用程序向-界面类型”对话框

图10-26 “应用程序向-菜单”对话框 图10-27 “应用程序向-自定义工具栏”对话框 图10-26 “应用程序向-菜单”对话框 图10-27 “应用程序向-自定义工具栏”对话框 图10-28 “应用程序向-Internet链接”对话框