第12章界面设计 本章介绍多文档界面(MD1)、图像列表框 工具栏、状态栏及应用程序向导。使读者 在界面设计和应用程序开发两方面都得到 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 第12章 界面设计 ◼ 本章介绍多文档界面(MDI)、图像列表框、 工具栏、状态栏及应用程序向导。使读者 在界面设计和应用程序开发两方面都得到 提高
12.1多文档界面 我们经常使用的 Windws98的记事本,是单文档界一 面,在这个界面中,当打开一个文件时,自动关 闭原来的文件。同一个时刻,只能处理一个文档。 多文档界面(MDI, Multiple document Interface 允许创建在单个容器窗体中包含多个窗体的应用 程序。绝大多数基于 Windows的大型应用程序都是 多文档界面,例如, Microsoft Word和 Microsoft Exce等。多文档界面可同时打开多个文档,它简 化了文档之间的信息交换 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 12.1 多文档界面 ◼ 我们经常使用的Windws98的记事本,是单文档界 面,在这个界面中,当打开一个文件时,自动关 闭原来的文件。同一个时刻,只能处理一个文档。 ◼ 多文档界面(MDI,Multiple Document Interface) 允许创建在单个容器窗体中包含多个窗体的应用 程序。绝大多数基于Windows的大型应用程序都是 多文档界面,例如,Microsoft Word和Microsoft Excel等。多文档界面可同时打开多个文档,它简 化了文档之间的信息交换
12.1.1多文档界面的特性 多文档界面由父窗体和子窗体组成,父窗体也称MDI窗体, 是作为子窗体的容器;子窗体也称文档窗口,显示各自文 当。图12.1是 多文档应用程序,它由一个父窗体和 个子窗口组成。多文档界面有如下特性: )所有子窗体均显示在MDI窗体的工作区中。用户可以改变、移 动子窗体的大小,但被限制在MDI窗体中。 2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在 务 当最小化MDI窗体时,所有的子窗体也被最小化,只有 MDI窗体的图标出现在任务栏中。 (3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示 在MDI窗体的标题栏上 ■(4)MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖 MDI窗体的菜单 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 12.1.1 多文档界面的特性 ◼ 多文档界面由父窗体和子窗体组成,父窗体也称MDI窗体, 是作为子窗体的容器;子窗体也称文档窗口,显示各自文 档。图12.1是一个多文档应用程序,它由一个父窗体和三 个子窗口组成。多文档界面有如下特性: ◼ (1)所有子窗体均显示在MDI窗体的工作区中。用户可以改变、移 动子窗体的大小,但被限制在MDI窗体中。 ◼ (2)当最小化子窗体时,它的图标将显示在MDI窗体上,而不是在 任务栏中。当最小化MDI窗体时,所有的子窗体也被最小化,只有 MDI窗体的图标出现在任务栏中。 ◼ (3)当最大化一个子窗体时,它的标题与MDI窗体的标题一起显示 在MDI窗体的标题栏上。 ◼ (4)MDI窗体和子窗体都可以有各自的菜单,当子窗体加载时覆盖 MDI窗体的菜单
12.1.2创建和设计MD窗体 开发多文档界面的一个应用程序至少需要两个窗体:一个 (只能一个)MDI窗体和一个(或若干个)子窗体。在不同窗 体中共用的过程、变量应存放在标准模块中 MDI窗体是子窗体的容器,该窗体中一般有菜单栏、工具 栏、状态栏,不可以有文本框等控件 ■1.创建MDI窗体 用户要建立一个MDI窗体,可以选择“工程”菜单中的“添加MDI窗体” 命令即可。本例MDI窗体名为“ MDIWrite”,以文件名为A121.frm保 存,如图12.2所示。 ■2.设计MDI窗体 设计MDI窗体时,可以建立菜单栏、工具栏、状态栏 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 12.1.2 创建和设计MDI窗体 ◼ 开发多文档界面的一个应用程序至少需要两个窗体:一个 (只能一个)MDI窗体和一个(或若干个)子窗体。在不同窗 体中共用的过程、变量应存放在标准模块中。 ◼ MDI窗体是子窗体的容器,该窗体中一般有菜单栏、工具 栏、状态栏,不可以有文本框等控件。 ◼ 1.创建MDI窗体 ◼ 用户要建立一个MDI窗体,可以选择“工程”菜单中的“添加MDI窗体” 命令即可。本例MDI窗体名为“MDIWrite”,以文件名为A12_1.frm保 存,如图12.2所示。 ◼ 2.设计MDI窗体 ◼ 设计MDI窗体时,可以建立菜单栏、工具栏、状态栏
12.1.3创建和设计MDI子窗体 ■MDI子窗体主要是显示应用程序的文档,通 常,在该窗体上应用有文本框,也可以有 菜单栏以及工具栏。 ■1.创建MDI子窗体 MDI子窗体是一个 MDIChild属性为True的普通窗体 因此,要创建一个MDI子窗体,应先创建一个新的普 通窗体,然后将它的 MDIChild属性设置为True即可 在工程管理窗口中,可以看到,子窗体的图标与 通窗体的图标不同,如图12.2所示。若要建立多个 子窗体,则重复进行上述操作。 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 12.1.3 创建和设计MDI子窗体 ◼ MDI子窗体主要是显示应用程序的文档,通 常,在该窗体上应用有文本框,也可以有 菜单栏以及工具栏。 ◼ 1.创建MDI子窗体 ◼ MDI子窗体是一个MDIChild属性为True的普通窗体。 因此,要创建一个MDI子窗体,应先创建一个新的普 通窗体,然后将它的MDIChild属性设置为True即可。 在工程管理窗口中,可以看到,子窗体的图标与普 通窗体的图标不同,如图12.2所示。若要建立多个 子窗体,则重复进行上述操作
(1)创建对象变量 创建以文档为中心的应用程序,为了在运行时建立若干个子窗体存取不同的 文档,一般先创建一个子窗体作为这个应用程序文档的模板,然后通过调用 对象变量来创建其他子窗体。创建对象变量用下面的语句 ■格式:Dim〈变量名〉 As New〈对象类型〉 功能:声明对象变量 例如:如果己建立了一个Name为“ frmChild”的子窗体,则: Dim NewDoc As New frmChild 就会为“ frmChild建立一个新实例,新实例具有与“ frmChi ld”窗体相同的属性 控件、代码。 ■说明:New关键字后应是“类名”。实际上,在工程中添加的窗体有着特殊性,它 既是窗体类,也是窗体对象,与在窗体上建立的控件具有不同的性质 例如 Dim NewDoc As New Forml 声明并创建一个 NewDoc窗体 变量 NewDoc Show 新窗体显示在屏幕上 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 (1)创建对象变量 ◼ 创建以文档为中心的应用程序,为了在运行时建立若干个子窗体存取不同的 文档,一般先创建一个子窗体作为这个应用程序文档的模板,然后通过调用 对象变量来创建其他子窗体。创建对象变量用下面的语句。 ◼ 格式: Dim 〈变量名〉 As New〈对象类型〉 ◼ 功能:声明对象变量。 ◼ 例如:如果已建立了一个Name为“frmChild”的子窗体,则: ◼ Dim NewDoc As New frmChild ◼ 就会为“frmChild”建立一个新实例,新实例具有与“frmChild”窗体相同的属性、 控件、代码。 ◼ 说明:New关键字后应是“类名”。实际上,在工程中添加的窗体有着特殊性,它 既是窗体类,也是窗体对象,与在窗体上建立的控件具有不同的性质。 ◼ 例如: ◼ Dim NewDoc As New Form1 '声明并创建一个NewDoc窗体 变量 ◼ NewDoc.Show '新窗体显示在屏幕上
(2)创建MDI子窗体的代码 窗体程序运行时建立一个子窗体的程序代码如下: Dim No As Integer Public Sub FileNewProcOT Dim NewDoc as New frmChi ld NO=No+1 NewDoc. Caption="编辑区 NewDoc Show 显示子窗体 End sub 如果多次调用 FileNewProc过程,则可以产生多个 “ frmChild”的子窗体,图12.1就是此程序运行的效果。 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 (2)创建MDI子窗体的代码 ◼ 窗体程序运行时建立一个子窗体的程序代码如下: ◼ Dim No As Integer ◼ Public Sub FileNewProc() ◼ Dim NewDoc As New frmChild ◼ No=No+1 ◼ NewDoc.Caption="编辑区" ◼ NewDoc.Show '显示子窗体 ◼ End Sub ◼ 如果多次调用FileNewProc过程,则可以产生多个 “frmChild”的子窗体,图12.1就是此程序运行的效果
2.设计MI子窗体 MDI子窗体的设计与MDI窗体无关,但在运 行时总是包含在MD窗体中。在该子窗体上 般有存放文档的控件,也可有子窗体菜 单 【例12.1】设计一个简易的书写器。 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 2.设计MDI子窗体 ◼ MDI子窗体的设计与MDI窗体无关,但在运 行时总是包含在MDI窗体中。在该子窗体上 一般有存放文档的控件,也可有子窗体菜 单。 ◼ 【例12.1】设计一个简易的书写器
2. Screen对象和 Screen. Activecontrol属性 窗体及 指件的信必5徒对多,对象能是供些 窗体或控件的详细特性。 Screen对象有许多属性,如 Activeform、 ActiveContro 如果屏幕上有多个窗体,通过Sre对象的 Act Contro属性, 够引用当前屏幕上激活窗体的各个属性,无需知 窗体对象的 体名称。 Screen. ActiveControl在MI窗体应用程序中非常有用 ■例如,把选定的文本复制到剪贴板上的过程如下: Private Sub CopyProco ClipBoard SetText Screen ActiveControl SelText End sub 此程序段与上述程序段的功能是一样的 ■即 Screen. ActiveControl与 frmMDI. Activeform. ActiveControl是等同的 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 2.Screen对象和 Screen.ActiveControl属性 ◼ 在多窗体操作中,每个窗体中往往有多个控件,要想获得屏幕上当前 窗体及当前控件的信息,必须使用Screen对象,Screen对象能提供当 前窗体或控件的详细特性。Screen对象有许多属性,如ActiveForm、 ActiveControl等。 ◼ 如果屏幕上有多个窗体,通过Screen对象的ActiveControl属性,能 够引用当前屏幕上激活窗体的各个属性,无需知道当前窗体对象的具 体名称。 Screen.ActiveControl在MDI窗体应用程序中非常有用。 ◼ 例如,把选定的文本复制到剪贴板上的过程如下: ◼ Private Sub CopyProc() ◼ ClipBoard.SetText Screen.ActiveControl.SelText ◼ End Sub ◼ 此程序段与上述程序段的功能是一样的。 ◼ 即Screen.ActiveControl与frmMDI.ActiveForm.ActiveControl是等同的
3.显示MD窗体及其子窗体 ■显示MDI窗体及其子窗体的方法是Show,加载子窗体时, 其父窗体(MDI窗体)会自动加载并显示。而加载父窗体MDI 时,其子窗体并不会自动加载 ■MDI窗体有 AutoShowChildren属性,决定是否自动显示子 窗体。如果它被设置为Tre,则当改变子窗体的属性(如 Caption等)后,会自动显示该子窗体,不再需要Show方法 如果设置 AutoShowChi ldren为 false,则改变子窗体的属 性后,不会自动显示该子窗体,子窗体处于隐藏状态,直 到用Show方法才能把它们显示出来。MDI子窗体没有 AutoShowChildren属性。 aual basic语言程序设计
Visual Basic 语 言 程 序 设 计 3.显示MDI窗体及其子窗体 ◼ 显示MDI窗体及其子窗体的方法是Show,加载子窗体时, 其父窗体(MDI窗体)会自动加载并显示。而加载父窗体MDI 时,其子窗体并不会自动加载。 ◼ MDI窗体有AutoShowChildren属性,决定是否自动显示子 窗体。如果它被设置为True,则当改变子窗体的属性(如 Caption等)后,会自动显示该子窗体,不再需要Show方法; 如果设置AutoShowChildren为False,则改变子窗体的属 性后,不会自动显示该子窗体,子窗体处于隐藏状态,直 到用Show方法才能把它们显示出来。MDI子窗体没有 AutoShowChildren属性