项目1 初识VB.NET
学习目标
了解.NET技术及其应用体系结构;
熟练掌握.NET的安装过程及系统要求和系统设置;
正确理解IDE环境并配置初始开发环境;
能够创建Windows简单窗体;
理解控件、对象、属性、方法及事件等基本概念;
能够熟练使用Label、TextBox与Button等基本控件;
掌握RadioButton、CheckBox控件的使用;
基本掌握LabelLink与PictureBox控件的使用。
预备知识
.NET 技术是微软公司推出的一个全新的概念,它代表了一个集合、一个环境和一个可以作为平台支持下一代 Internet 的可编程结构。.NET 是一种面向网络、支持各种用户终端的开发平台环境,其目的就是将互联网作为新一代操作系统的基础,对互联网的设计思想进行扩展。
.NET 的最终目标是让用户在任何地方、任何时间、利用任何设备都能访问所需要的信息、文件和程序,用户不需要知道这些文件放在什么地方,只需要发出请求,然后就可以接收处理的结果,后台的复杂处理过程对用户而言是透明的。
1.NET的开发平台
.NET开发平台包括.NET框架和.NET开发工具等组成部分,如图1-1所示。.NET框架(Framework)是整个开发的基础,包括公共语言运行库(Common Language Run,CLR)和框架类库。公共语言运行库是.NET 的基础,用户可以将公共语言运行库看做一个代理,一个在执行应用程序时管理代码的代理,它提供核心服务,而且还强制实施严格的类型安全检查,以确保代码运行的安全性和可靠性。
图1-1 .NET的开发平台
.NET 开发工具包括 Visual Studio.NET 集成开发环境和.NET 编程语言,其中,Visual Studio.NET 集成开发环境用来开发和测试应用程序,.NET 编程语言包括 Visual Basic、Visual C++、C#等,它们主要用来创建运行在公共语言运行库上的应用程序。
.NET 类库是一个综合性的、面向对象的可重用类型集合,用户可以使用它开发包含从传统的命令行或图形用户界面(GUI)应用程序到基于 ASP.NET 所提供的创新应用程序在内的应用程序。
2.VB.NET的特点
完全支持面向对象编程;
使用ADO.NET进行数据访问;
能够方便地进行Web应用程序的开发。
模块1 VB.NET使用基础
任务1 安装Visual Studio 2005及IDE环境设置
任务要求
在开发应用程序之前,需要安装相应的开发软件,下面请你将 Visual Studio 2005 安装在你的机器上,并设置其运行环境。
任务分析
(1)安装Visual Studio 2005可以通过光盘或者硬盘上的文件来完成,这里以光盘为例;
(2)由于Visual Studio 2005提供了一组.NET的开发工具,在具体使用时可根据具体情况选择适当的开发工具,因此在使用之前需要设置应用程序的开发及运行环境。
任务单
(1)通过光盘安装Visual Studio 2005;
(2)了解并设置其运行环境。
任务解决方案
步骤1:检查机器软件及硬件系统
右击“我的电脑”|“属性”,选择“常规”选项卡,检查内存及操作系统版本。
步骤2:插入Visual Studio 2005光盘执行安装
将光盘插入光驱,自动运行或双击打开 setup.exe 进行安装,安装过程如图1-2至图1-9所示。
图1-2
图1-3
图1-4
图1-5
图1-6
图1-7
图1-8
图1-9
勾选“我接受许可协议中的条款”前的复选框,在名称中输入公司名称,也可不输入
采用默认值,安装常用功能;选择自定义方式,用户可以根据需要选择安装功能,本任务选择自定义方式
当且仅当选择自定义安装方式时可见,用户根据自己的使用需要选择,但Visual Basic必选
开始安装系统所需的文件
系统安装成功
可根据需要选择是否安装 msdn,不安装则单击“退出”按钮结束Visual Studio 2005的安装
步骤3:设置运行环境
当用户安装完成后,在第一次启动应用程序后,系统会提示选择默认环境设置。如图1-10所示,选择“Visual Basic开发设置”,之后显示起始页,如图1-11所示。
图1-10
图1-11
为了使用方便,可单击菜单栏中的“工具”|“选项”,打开“选项”对话框,单击“项目和解决方案”,展开后选择“常规”选项,选中“创建时保存新项目”左侧的复选框,用于在新建一个项目时确定项目的保存位置同时保存项目,如图1-12所示。
图1-12 “选项”对话框
知识梳理
1.软、硬件要求
Visual Studio 2005是一种功能非常强大的集成开发环境,它可以使应用程序的开发过程更简单、更高效,同时它也是一个比较大的应用软件,对于系统和硬件都有比较高的要求。为了能够顺利安装与使用 Visual Studio.NET 2005,不同的使用版本对软、硬件要求也不尽相同,表1-1列出了常用版本的安装要求。
表1-1 Visual Studio 2005安装要求
2.环境设置
Visual Studio 2005提供多种编程语言,主要包含VB.NET、C#、C++、J#等,根据使用的需要及机器的配置情况,在安装时可选择其中的一部分或全部安装。如果在安装时选择了多个编程语言,那么在启动之前需要指定一个经常使用的编程语言,以方便用户使用。
3.产品文档(MSDN)
产品文档是Visual Studio 2005的帮助文件,它包含Visual Studio 2005的编程技术信息及其他资料。Visual Studio 2005 的联机帮助文档采用超文本链接格式,如果安装了MSDN,则在使用时可以随时使用其中的帮助信息。在安装过程中可以选择安装或不安装,但是如果需要安装MSDN,则硬盘所需的可用空间要大很多。
小试身手
由于光盘的读取速度比硬盘慢,很多人宁愿选择虚拟光盘来安装大型的应用程序,请你试着利用虚拟光盘安装Visual Studio 2005,并将默认的编程语言设置为C#。
任务2 IDE环境与应用程序的创建
任务要求
运用Visual Studio 2005新建一个项目,用以开发一个“学籍管理系统”应用程序的欢迎界面,要求在标题栏上能显示“学籍管理系统”,且界面美观、欢迎信息醒目;同时,要求提供一个按钮,当单击该按钮后,能关闭该窗口。请充分借助于IDE环境快速完成此项工作。
任务分析
利用 Visual Studio 2005 可以创建满足不同需要的应用程序,且借助于面向对象的开发技术,可以在一个应用程序中建立多个友好的人机交互界面。因此,创建一个应用程序其首要任务是建立一个项目文件,再在其中添加多个 Windows 窗体或相关内容,通过窗体可以完成用户与应用程序之间的信息交互,且利用项目来管理多个不同的对象,如窗体等。
任务单
(1)启动Visual Studio 2005,选择VB程序设计语言;
(2)创建项目,选择存放的路径及项目名称;
(3)创建窗体,设置窗体的属性;
(4)添加控件及控件的事件处理程序;
(5)设置运行环境,调试运行应用程序。
任务解决方案
步骤1:启动Visual Studio 2005,创建新项目
双击桌面上的图标,打开 Visual Studio 2005,单击执行菜单栏命令“文件”|“新建项目”,弹出“新建项目”对话框,在“项目类型”中选择“Visual Basic”,在“模板”中选择“Windows 应用程序”,单击“浏览”按钮选择“E:\unit1”,在“名称”栏后输入“project1-1”,如图1-13所示。
图1-13 新建项目
步骤2:认识IDE窗口
打开IDE窗口如图1-14所示,其中“Form1.vb”是系统自动为应用程序添加的一个窗体,它是窗体的主要工作区域;其窗口设置是一个默认设置,用户也可以根据需要借用菜单栏或工具栏进行调整。窗口主要部分及功能如下。
图1-14 默认窗口
① 解决方案资源管理器:主要用于管理应用程序中的所有文件。在该窗口中列出了解决方案名称、项目名称及项目中用到的所有窗体名称、模块名称等。
② 属性面板:用于显示并设置每个对象的所有属性。
③ 工具箱:包含了可以添加到应用程序的窗体上的对象和控件,这些对象和控件按类型分别放在不同的选项卡上,默认是自动隐藏的。
④ Windows 窗体编辑器:主要用于为应用程序设计用户接口,是设计应用程序交互界面的主要工作区域。它是一个容器控件,可以在其中放置不同的控件并对控件进行布局调整。
⑤ 错误列表:当应用程序执行时,若存在语法错误,则在此处显示错误信息,方便用户定位错误并及时修改。
⑥ 常用工具栏:功能同其他应用程序。
⑦ 布局工具栏:当需要调整窗体中控件的大小、位置及排列方式时,可利用此工具栏快速实现。
除此之外,当右击窗体区域、选择“查看代码”或双击窗体上某个对象时,会打开代码窗口,该窗口区域主要用于编辑事件处理程序、用户自定义变量或函数等。
步骤3:设计窗体
(1)单击 Form1 窗体,单击窗口右侧的“属性”按钮,将 Text 属性值设为“学籍管理系统”。
(2)将鼠标指向“工具箱”、展开“公共控件”,双击其中的 Button、Label 和PictureBox 控件,向窗体添加 3 个控件 Button1、Label1 和 PictureBox1,然后将这 3 个控件移动到合适的位置。
(3)单击选中Button1控件,将其Text属性值修改为“确定”。
(4)选中 Label1 控件,将其 Text 属性值改为“欢迎使用学籍管理系统!”,将 Font 属性值改为“隶书、四号”,将ForeColor属性值改为“蓝色”。
(5)单击 PictureBox1 控件,单击 Image 属性右侧的按钮,打开对话框如图1-15所示,选择“本地资源”,单击“导入”按钮,选择E:\unit1\images\dark.jpg文件(可以先回到操作系统下建立一个文件夹 E:\unit1\images,并任意复制一个图片文件或者任选一个图片文件),单击“确定”按钮,将SizeMode属性值改为“Zoom”。
图1-15 “选择资源”对话框
步骤4:设计按钮的事件处理程序
在“确定”按钮上双击,打开代码文件,在其中添加两行代码(以粗体显示的),其余的为系统自动生成。
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() Application.Exit() End Sub End Class
步骤5:设置启动窗体并运行程序
右击“解决方案管理器”中的项目“project1-3”,选择“属性”选项打开窗口,将启动窗体设为“Form1”(默认启动窗体是Form1),按F5键进行调试运行。运行后的界面如图1-16所示。
图1-16 运行后的界面
自主探究
1.设置启动项目与设置启动窗体是否一样?当有多个项目(如 proj1-1 和 proj1-2)时,如何将启动窗体设置为proj1-2中的Form1?
2.如何进入窗体对应的代码文件中?可以有几种方法?请说明具体的操作方法。
3.一个应用程序对应的文件常用的有哪些?在解决方案资源管理器中所见的与在对应文件夹中所列的文件有何不同?
知识梳理
1.常用工具窗口介绍
(1)工具箱
当工作窗口是窗体设计器时,工具箱中的所有控件可用。默认状态下,工具箱处于自动隐藏状态,将鼠标光标放在“工具箱”上,工具箱会自动打开;也可以单击“自动隐藏”按钮,在工具箱的隐藏/显示状态之间切换,如图1-17所示。
图1-17 工具箱的隐藏与显示
工具箱包括多个控件组,每个控件组又包含多个控件,每个控件组中的控件根据功能来划分。主要控件组如图1-17所示,单击“+”可以展开相应的控件组,双击某个控件或单击选择某个控件然后拖放到窗体的对应位置,即可在窗体中添加一个相应的控件。
(2)资源管理器窗口
新建一个项目或打开一个项目后,项目的所有内容会显示在解决方案资源管理器窗口中,单击标准工具栏上对应的按钮可显示该窗口。在该窗口中双击某一个文件,或右击*.vb 文件、选择“查看设计器”,就能在主窗口中打开该文件。若右击*.vb 文件、选择“查看代码”,可以打开当前窗体对应的代码文件。
(3)属性窗口
在 VB.NET 中,任何一个对象都有其特有的属性,通过属性窗口来设置不同对象的属性。属性窗口的打开方法有如下3种:
在窗体中指向某个控件后右击、选择“属性”;
执行菜单命令“视图”|“属性窗口”;
单击标准工具栏上的按钮。
(4)代码设计窗口
任何一个对象均可以对应一个或多个事件处理程序,用户添加自定义的方法或变量也可以在代码设计窗口中进行。代码设计窗口的打开可采用如下方法之一:
右击任意一个对象,选择“查看代码”;
在解决方案资源管理器中右击*.vb,选择“查看代码”;
执行菜单命令“视图”|“代码”;
双击任意一个对象,打开代码设计窗口,同时添加一个默认的事件处理程序。
2.应用程序的组成
通过任务 1 可以看出,利用 Visual Studio 2005 创建的应用程序即使只包含一个Windows 窗体,同样也会有多个组成部分,如文件或文件夹等。为了有效地组织这些项目,.NET提供了两种容器:项目与解决方案。一个解决方案可以包含一个或多个项目。
当创建一个应用程序后,在 IDE 环境中的“解决方案资源管理器”中,通常可显示的文件只有Form1.vb,如图1-18所示。
图1-18 解决方案中的常用文件
此处的工具栏中有两个常用的按钮:
① 用于显示所有的文件,一般是隐藏的,当单击此按钮时,其内容会变成如图1-19所示的文件列表;
图1-19 解决方案中的所有文件
② 用于查看代码,当有事件处理程序需要修改时,通过该按钮可以打开相应的代码文件。
(1)Form1.vb及Form1.Designer.vb、Form1.resx文件
当用户新建一个项目后,系统会自动添加 Form1.vb 文件,如果需要添加多个 Windows窗体文件,默认的文件名为 Form2、Form3、……。该文件是由用户根据功能要求添加的各种对象组成的,这个文件对应两个系统自动生成的文件,即 Form1.Designer.vb 和Form1.resx。前者是针对程序设计界面自动生成的代码,主要包含窗体所有对象的声明信息、Form1.cs中的Form1类构造函数Initialize()调用的方法,以及窗体销毁时用于清理组件列表的Dispose()方法,该文件一般不通过编辑器修改;Form1.resx用来保存窗体所应用的所有资源,包括文字、图像等。
(2)项目引用与名称空间
添加项目引用的主要目的是让 VB.NET 中的项目可以使用外部对象,如本任务中的Button、Form 类均包含在 System.Windows.Forms 名称空间中,因此在项目中必须包含对其的引用。常用的项目引用如图1-19所示。
名称空间用于组织项目中定义的对象,每个名称空间可以包含下级名称空间。名称空间的主要作用是防止对象名称含义不清的问题出现,同时也可以简化对类库的引用。一个项目可以包含多个名称空间。
当添加项目引用后,可以通过Imports语句来简化对项目引用的访问。
Imports语句具有如下语法:
imports 名称空间
在代码文件中,Imports语句必须位于代码文件的首部。如果在代码文件的首部有:
Improts System.Windows.Form
则在后面可以用 Dim frm As New Form 语句来代替 Dim frm As New System.Windows. Form.Form语句得到一个Form类的对象frm。
(3)AssemblyInfo.vb文件
AssemblyInfo.vb 文件是保存程序集信息的文件,一个程序集对应一个这样的文件,其主要内容为程序集的版本信息,如程序集的版本号、说明、产品公司等。它由三部分内容组成:使用的名称空间、一般信息、版权信息。
(4)Application.Designer.vb文件
该文件主要定义 OnCreateMainForm()方法,而该方法是应用程序的入口点,它指明了运行应用程序时的启动窗体。当新建一个项目后,系统会自动将第一个 Form 窗体(默认的为 Form1)设置为当前应用程序的启动窗体。在 Application.Designer.vb 文件中的部分内容如下:
Protected Overrides Sub OnCreateMainForm() Me.MainForm = Global.project1_3.Form1 End Sub
但该文件一般不用直接修改,如果要修改启动窗体,可通过以下方法来进行:
右击“解决方案资源管理器”中的项目名称,选择“属性”,打开如图1-20所示的窗口,在“程序集名称”中显示对应的项目名称,在“启动窗体”下的下拉列表框中选择对应的窗体名称,单击按钮关闭即可。
图1-20 修改启动窗体
说明:
当有多个项目时,可以通过右击项目名称、选择“设为启动项目”来改变启动项目。
(5)其他文件
project1-3.sln:用来保存与解决方案相关的信息,也是应用程序的基础文件,双击会打开应用程序。
project1-3.suo:与 project1-3.sln 存放在同一个文件夹中,存储对 IDE 进行自定义的源数据。
project1-3.vbproj.user:用来保存用户对项目的设置参数。
project1-3.vbproj:用来描述项目并列出项目中所包含的文件。
3.基本概念
(1)类与对象
在面向对象的程序设计中,类是核心,一个类可以包含多个变量、属性和方法;通过
对类进行实例化可以得到一个对象,对象可以驱动事件完成应用程序的相应功能。
定义类的一般格式为:
Public Class 类名 语句体 End Class
当新建一个项目或者添加一个新窗体后,每个窗体都会对应一个类,如本任务中的Form1窗体就是一个类:
Public Class Form1 … End Class
当拖放一个控件到窗体上时,系统会自动建立一个类的对象,如Button1即是Button类的一个对象。与实际生活中一样,对象就是实际存在的一个物体,除了自身具备的一些特征外,还可以对对象执行某种操作。
(2)属性
属性是对象的特征,如 Form1 对象的大小、背景颜色等,可以通过属性面板或程序代码进行设置或获取其值。
(3)事件
事件是针对某一对象可以执行的某一动作。事件可分为系统事件和用户事件。系统事件由操作系统触发,用户事件一般由用户通过键盘或鼠标触发,如鼠标在窗体上移动、单击或双击等,事件可在任何对象上发生。用户事件完成的任务由用户编写的事件处理程序来实现。
在某一个对象上可触发的事件可通过右击属性窗口上的工具按钮来查看,在相应的事件上双击,可自动进入代码文件并形成事件处理程序头。
(4)方法
方法是一组执行某一特定操作的一条或多条语句。在 VB.NET 中,方法有两种类型:过程和函数。
小试身手
(1)启动Microsoft Visual Studio 2005后,新建一个项目,并在该应用程序中设计一个窗体,用以显示一个如图1-21所示的窗体,其中所用的控件可以任意选取,当单击“关闭”按钮时退出应用程序。
图1-21 示例窗体
(2)在项目Project1-3中添加上述窗体并完成相应的功能,要求在运行时以该窗体作为启动窗体,请再次尝试完成。
(3)请试着添加一个新窗体(窗体名称为 mainfrm)在当前的项目中,让窗体具有图1-16所示的功能。
(4)在本解决方案中再添加一个项目stu1-3,并将项目project1-3中的Form1复制到项目stu1-3中,请尝试完成。
模块2 窗体和常用控件
任务1 窗体设计
任务要求
很多应用软件进入时都有欢迎界面,现设计一个如图1-22所示的欢迎界面(暂无文字等内容)。
图1-22 欢迎界面
任务解决方案
步骤1:新建项目
新建项目,以“project1-2”为名保存在 E:\unit1 文件夹中,注意观察资源管理器中有一个默认窗体Form1。
步骤2:新建窗体
在“项目”菜单中选择“添加 Windows 窗体”,弹出如图1-23所示对话框,采用默认值,直接单击“添加”按钮,在资源管理器中增加一个窗体Form2。
图1-23 添加窗体对话框
步骤3:改变启动窗体
在“项目”菜单中选择“project1-2 属性”,弹出如图1-24所示对话框,在“启动窗体”下拉列表中选择“Form2”,然后关闭对话框。
图1-24 设置启动窗体对话框
步骤4:修改Form2的窗体名和标题
在属性窗口中找到 Name 属性,其默认值为“Form2”,修改为“hyfrm”;修改 Text属性为“欢迎”。
步骤5:改变hyfrm窗体的大小和位置
单击Size属性前的“+”将其展开,修改Width属性值为“500”,Height值为“350”;StartPosition属性修改为“CenterScreen”。
步骤6:设置hyfrm窗体的外观
单击BackcColor属性右边的下拉按钮,在弹出的选项卡中选择“自定义”,任选一种颜色;设置FormBorderStyle属性为“Fixed3D”;设置Maximizebox属性和Minimizebox属性值均为“False”。
步骤7:添加hyfrm窗体代码
双击hyfrm窗体,打开代码设计器,选择click事件,输入下列代码:
Private Sub hyfrm_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Form1.Show() End Sub
步骤8:添加Form1窗体代码
双击Form1窗体,打开代码设计器,输入下列代码:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "第二界面" End Sub
步骤9:测试程序
知识梳理
面向对象程序设计中的对象包括窗体和控件,通过它们能快速设计出需要的应用程序界面。其中,窗体用来作为其他控件对象的载体和容器,控件则是添加到窗体上的对象,它们都有自身的属性、方法和事件。
一个应用程序往往包含多个窗体,新建项目时系统提供一个默认窗体Form1,通过右击项目名称、选择“添加Windows窗体”可以创建一个新的窗体,输入窗体名称。
当应用程序运行后,多个窗体并不同时显示,将第一个出现在屏幕上的窗体称为启动窗体,通过启动窗体可以调用其他窗体显示。一个项目有且只有一个启动窗体,调试时一般将被调试窗体设置为启动窗体。
窗体有MDI和SDI两类。MDI窗体是指多文档窗体,典型的如Word,在Word应用程序主界面(父窗体)中可同时打开多个文档(子窗体);SDI 窗体是指单文档窗体,典型的如记事本,某一时刻只能打开一个文档,新文档打开的同时将关闭旧文档。MDI 窗体的有关内容将在后面介绍。
1.窗体属性
窗体的属性很多,常用的窗体属性如下所述。
(1)Name与text属性
Name 属性是指窗体名,系统提供的默认窗体名为“Form”加上数字,如 Form1、Form2,设计时可修改,如任务中改为hyfrm,但程序运行时该属性为只读。
窗体名是程序引用窗体时的唯一标识,如任务中 From1.Show()指定显示 From1。如果是对当前窗体操作,则使用Me来代表窗体名,如任务中的Me.Text="第二界面"。
Text 属性是指窗体的标题,创建时系统提供与窗体名一样的默认标题,设计时可修改,如任务中修改窗体hyfrm的标题为“欢迎”,运行时也可修改,如任务中的Me.Text ="第二界面"。
之所以把这两个属性放在一起介绍是因为初学者往往分不清二者的区别,更有甚者将保存时的窗体文件名也与它们混淆,资源管理器中看到的扩展名为.vb的文件即为窗体文件。
(2)标题栏有关属性
除Text属性用于设置窗体的标题外,标题栏还涉及最大化、最小化等按钮。
ControlBox 属性:为 True 时有窗口控制菜单,为 False 时无窗口控制菜单。只有当 ControlBox 属性为 True 时 Maximizebox、Minimizebox、HelpButton 属性设置才有效。
注意:
ControlBox 属性为 False 时窗体不显示关闭按钮,这时就无法关闭正在运行的窗体(可用“调试”菜单中的“停止调试”关闭),所以该属性一般在所有工作完成后再设置。
Maximizebox/Minimizebox属性:最大/最小化按钮是否显示,任务中已示例。
HelpButton属性:是否显示帮助按钮。
Icon属性:设置窗体图标。图标文件扩展名为.ico,可搜索该类文件后自行设置。
(3)外观属性
FormBorderStyle属性:边框样式,有7个选项,如任务中用的是Fixed3D。
BackColor 属性:设置窗体背景色,设置方法任务中介绍了一种,其他的将在后面介绍。
BackColorImage/BackColorImageLayout属性:设置背景图片及其显示方式。
(4)位置与大小
窗体的大小可在设计时通过拖曳句柄粗略调节,也可设置其Width和Heigh属性值进行调节。
StartPosition 属性设置窗体在启动时显示在屏幕中的位置,CenterScreen 使得窗体启动时显示在屏幕中间,StartPosition属性有5个选项。
窗体有三态:还原、最大化、最小化,通过设置 WindowsState 属性即可改变窗体启动时的状态。
(5)设置鼠标指针
设置Cursor属性可改变鼠标指针形状。
2.窗体事件
窗体的事件中很多与窗体的状态有关,每个事件间存在着一定的时间差,如 FormClosed和FormClosing,因而适用于不同场合,常用的事件主要有以下几类。
(1)Load()
窗体装入工作区时触发该事件,常用来对属性和变量进行初始化。
(2)FormClosed()
关闭窗体后触发该事件。
(3)Activated()
在窗体被激活时触发该事件。
(4)Deactivate()
在窗体失去焦点成为不活动窗体时触发该事件。
(5)Click()/DBClick()
在窗体空白区域或无效控件上单击/双击时触发该事件。
(6)Paint()/Resize()
Paint():窗体被移动或缩放部分后或全部暴露时发生。
Resize():窗体第一次显示或窗口状态发生改变时(最大/最小化、缩放操作)触发。
3.窗体方法
① Show()方法:显示窗体。
② Hide()方法:隐藏窗体。
③ Refresh()方法:刷新窗体。
④ Activate()方法:激活窗体并给予焦点。
⑤ Close()方法:关闭窗体。
自主探究
请自行探索窗体的其他属性、事件和方法。
小试身手
任务中的欢迎界面比较粗糙,请自行设计一个漂亮的欢迎页。可参考 VS 的模板(在图1-23所示对话框中选择“初始屏幕”模板)。
任务2 公共控件(1)
任务要求
使用应用软件前一般需要验证用户信息(账号和密码),本任务即设计一个实现该功能的用户登录窗口,要求该窗口不可以最大化和最小化,启动后显示在屏幕的正中央。
任务解决方案
步骤1:新建窗体
在项目“project1-2”中添加 Windows 窗体,窗体名为 loginfrm,并将 Text 属性改为“用户登录”,FormBorderStyle 属性改为 FixedDialog,Maximizebox、Minimizebox 属性设置为False,StartPosition属性设置为CenterScreen,Width值为300、Height值为240,如此得到一个窗体,如图1-25所示。
图1-25 用户界面
步骤2:添加控件
在工具箱中展开公共控件,双击 Label 控件,添加 label1 和 label2 并将其移动到合适位置。
在窗体上添加 2 个 TextBox 控件 TextBox1、TextBox2,2 个 Button 控件 Button1、Button2。
步骤3:设置Text属性
单击 Label1 将其选中,在属性窗口中修改其 Text 属性为“用户名:”,修改 Label2 的Text属性为“密码:”。
单击Button1将其选中,在属性窗口中修改其Text属性为“确定(&O)”,修改Button2的Text属性为“放弃(&C)”。
步骤4:设置Font属性
由于这 6 个控件都有 Font 属性,且设置成一样的字体和大小,所以可同时设置。同时选中这些控件,修改Font属性为小四号。
步骤5:调节控件的大小和位置
按图1-26所示调节各控件的大小和位置。选中控件后拖动可将控件移动到指定位置,拖动句柄可改变控件大小。
图1-26 用户登录界面
步骤6:编写文本框事件代码
双击用户名文本框,进入代码窗口,在事件下拉列表中选择“KeyPress”,输入:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows. Forms. KeyPressEventArgs) Handles TextBox1.KeyPress If Asc(e.KeyChar) = 13 Then TextBox2.Focus() End If End Sub
步骤7:编写放弃按钮代码
双击“放弃”按钮,进入代码窗口,输入:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub
步骤8:测试程序
知识梳理
从本任务开始我们将接触各种各样的控件,这些控件根据功能分成多个类别,如公共控件、容器等。本任务中介绍了3种常用控件,并通过它们熟悉控件的基本操作。
1.控件操作
(1)创建对象
在工具箱中单击所需控件对象,在窗体中拖曳。
在工具箱中双击所需控件对象。
(2)对象的选定
在工具箱中先单击“指针”,呈选择状态,然后可进行以下操作:
单击对象选定一个。
按Ctrl(或Shift)键再单击其他对象可选定多个。
用拖曳的方法圈住所需的对象。
(3)对象的复制
可用复制的方法生成新控件,复制产生的控件某些属性是相同的,如大小,因而可生成一组属性相似的控件,但VB.NET不支持控件数组。
(4)对象的删除
选定要删除的对象,按删除键Del即可。
(5)对象大小和位置的调节
选定一个或多个控件后,用鼠标拖动句柄可改变控件大小,如果是其他部位则移动控件位置。由于 VB.NET 中提供标尺线,所以这种方式的定位也较精确。还可在属性窗口用数字精确调节控件的大小和位置。
当控件调整合适后,为防误操作可将控件锁定,方法有二:一是执行菜单命令“格式”|“锁定控件”;二是在属性窗口中将Lock设置为True。
自主探究
请自行探索“格式”菜单的每个功能项。
2.控件常用属性
控件的属性很多,有些是某个控件特有的,有些是很多控件都具有的,在此介绍那些常用的、共有的属性(但不是所有控件都有)。
另外要注意属性间的区别,有些属性只能在设计时修改(只读),有些只能在代码中修改,有些在设计、运行时都能修改。
(1)Name/Text
这两个属性与窗体中的大致相同,略有不同的是控件可以设置热键,如任务中的确定按钮;设置热键的方法任务中已有,&符号后的第一个字符即为热键。
(2)Location/Size
Location:控件在容器中的位置,其由 x、y 两个参数组成,它们指明控件左上角的坐标。默认坐标系统以容器(如窗体)左上角为原点。
Size:控件大小,由Height、Width的值决定控件的高与宽,以像素为单位。
(3)Enabled/Visible
Enabled:控件是否允许操作,True为允许,False为禁止(灰化)。
Visible:控件是否可见,True为可见,False为不可见。
注意,无论灰化还是不可见,都是指在程序运行时而非在设计时。
(4)Font
改变控件的字形、字体等。Font由Name、Size等成员构成。
(5)ForColor/BackColor
这两个属性是指前景(正文)/背景颜色。表示颜色的方法有多种,常用的两种方式如下。
颜色常量:如Red表示红色,在属性窗口中设置时可观察到各种颜色常量。
RGB 色彩:用三个 0~255 的数字表示不同色彩,如 RGB(255,255,255)表示白色,RGB(255,0,0)表示红色。在属性窗口输入时只需输入形如(255,0,0)的数字即可。
(6)TabIndex和TabStop
任务中有两个文本框,当用鼠标单击某一文本框时,光标将在该文本框中闪烁,这时就可输入数据,称之为获得焦点。焦点(Focus)是指具有接收用户鼠标和键盘输入的能力。具有焦点的应用程序才是活动窗口,具有焦点的控件才能接收输入。
TabIndex:指控件的焦点顺序。创建的第一个控件的TabIndex为0,其后依次为1、2、3…,当按Tab键时,焦点即按这一顺序移动。可以通过修改TabIndex值来改变这一顺序。
TabStop:控件焦点是否起作用,一旦设置为 False 则在焦点顺序中跳过该控件,但TabIndex仍存在。
(7)TextAlign
控件文本的对齐方式,可以是左对齐、右对齐或居中。
(8)AutoSize
当其值为True时,控件能根据内容的大小自动调整自身大小。
自主探究
与窗体一样,控件也有外观属性,请找到这些属性并熟悉之。
3.有关Label、TextBox、Button的说明
Button 称为命令按钮,该控件通常用于执行某些操作。Label 称为标签,通常用来显示静态文本,显示的文本不能编辑。TextBox 称为文本框,主要用于文本的输入、编辑、显示等操作。
对于文本框,还需熟悉一些常用属性。
MaxLength属性:文本框中能容纳的最大字符数。
ReadOnly 属性:如果文本框中的内容仅用于显示而不想让用户修改,可设置其为True。
PasswordChar 属性:在密码接收文本框中输入密码时不想显示其内容,可通过该属性来设置,通常用“*”来代替输入的内容。
MultiLine属性:值为True时,文本框由单行变成多行,多行文本一般需自动换行,是否自动换行由WordWrap属性决定。
ScrollBars属性:设置是否有滚动条及滚动条的形式。
Label 一般仅用于显示文本,所以无须用到事件、方法,Button 常用 Click 事件,任务中已有实例。下面着重介绍文本框的事件和方法。
任务中步骤 6 的事件过程的功能是当在用户名文本框中输入完并回车时,焦点自动跳到密码文本框。只要按键盘就会触发 KeyPress 事件,其参数 e.KeyChar 是键盘输入的最后一个字符,因为回车是不可见字符,只能通过ASCII码来比较。
当文本框中的 Text 发生变化时将触发 TextChanged 事件,例如,用键盘输入“ABC”会发生三次 TextChanged 事件。TextChanged 事件与 KeyPress 事件有相似之处,有时可互相代替;但也有区别,KeyPress 事件的 e.KeyChar 能提供键盘最近一次输入的字符,因而可获得击键信息,而程序运行时改变Text也将触发TextChanged事件,因而它们可适用于不同的场合。
任务中的 TextBox2.Focus(),其作用是将焦点移到 TextBox2,Focus 是移动焦点的方法。当焦点移动时会触发两个事件:失去焦点事件Leave()和获得焦点事件GotFocus()。例如:
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave If Trim(TextBox1.Text) = "" Then TextBox1.Focus() End If End Sub
该事件过程的功能是当TextBox1失去焦点时测试其Text是否为空,如果是空焦点回到该控件。由于KeyPress事件优先于Leave事件,所以验证该过程前应先将KeyPress事件过程删除。
自主探究
有一个与 Label 控件相近的控件 LinkLabel,其增加了超链接功能,属性的差异主要为超链接方式和颜色的设置。请自行熟悉这些属性,特别是以Link开头的属性。
小试身手
设计一个程序,文本框中只允许输入数字,输入其他字符将自动去掉。
任务3 公共控件(2)
任务要求
设计一个输入学生档案信息的应用程序界面。
任务解决方案
步骤1:新建窗体
在项目“project1-2”中添加 Windows 窗体,窗体名为 xsda,Text 属性改为“学生档案”,并按图1-27所示将已掌握的控件添加到窗体上。
图1-27 “学生档案”界面
步骤2:添加NumericUpDown控件
双击工具箱中的 NumericUpDown 控件,调整控件的大小和位置,将 Name 属性改为NumUD1,设置 Minimum 属性值为 14,Maximum 属性值为 24,Increment 属性值为 1, DecimalPlaces属性值为0。
步骤3:添加RadioButton控件
双击工具箱中的 RadioButton 控件,向窗体添加两个 RadioButton,分别修改 Text 属性为“男”、“女”,调整其大小和位置,Name 属性分别改为 RaBtn1、RaBtn2,修改 RaBtn1的Checked属性为True。
步骤4:添加CheckBox控件
双击工具箱公共控件中的 CheckBox 控件,向窗体添加三个 CheckBox,分别修改它们的Text属性为“体育”、“音乐”、“集邮”,调整其大小和位置。
步骤5:添加PictureBox控件
在工具箱公共控件中找到 PictureBox 控件,在窗体适当位置用拖曳的方法画出一个适宜大小的PictureBox,在其属性窗口中找到Image属性并打开下层对话框,如图1-28所示。
图1-28 “选择资源”对话框
选中“项目资源文件”,然后单击“导入”按钮,在出现的“打开”对话框中找到所需图片并单击“打开”按钮,即可将选择的图片导入项目资源文件中,图 1-28 中的 04.jpg 就是已导入的图片。单击“确定”后返回设计窗口,这时PictureBox控件中显示该图片,再修改PictureBox控件的SizeMode属性为ZOOM。
注意观察资源管理器中多了一个文件夹Resources,其下有一个文件04.jpg。
步骤6:编写代码
Dim xb As String="男" '在声明部分定义
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim ah As String
If CheckBox1.Checked Then ah = ah + "体育"
If CheckBox2.Checked Then ah = ah + "音乐"
If CheckBox3.Checked Then ah = ah + "集邮"
TextBox2.Text="姓名:"+TextBox1.Text+Space(9)+"年龄:"+ Str(NumUD1.Value) + Space(9)
+ "性别:" + xb + Space(9) +"爱好:" + ah
End Sub
Private Sub RaBtn1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RaBtn1.Click
If RaBtn1.Checked Then xb = "男"
End Sub
Private Sub RaBtn2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RaBtn2.Click
If RaBtn2.Checked Then xb = "女"
End Sub
步骤7:测试程序
知识梳理
本任务是一个不完整的学生档案信息录入界面,输入的学生信息需保存于磁盘文件中才能长期使用,这涉及文件知识和数据库知识,这里仅用一个文本框输出录入的数据,以便观察。在该任务中新出现了4种常用公共控件。
1.NumericUpDown控件
NumericUpDown 控件可称为数码器、微调按钮等,其适用于一定范围内有规则的数值数据,因为它除了能像文本框一样接收数据外,还能通过上、下箭头调节数值大小。
其Minimum属性是指最小值,Maximum属性为最大值,设置这两个属性后,数据只能在这二者的范围内变动,变动的幅度由 Increment 属性决定,如任务中是每次变动 1。当有小数时由DecimalPlaces属性决定小数位数。
Value属性返回该控件的当前值。
NumericUpDown 控件比较常用的事件是 ValueChanged(),即当控件值发生变化时触发该事件。
2.RadioButton和CheckBox控件
RadioButton控件称为单选按钮,CheckBox控件称为复选按钮。二者很多地方都相同,其主要差异为单选按钮类似于试卷上的单选题,只能在多个选项中选一个,例如任务中选了“女”选项则“男”选项自动变成未选状态;而复选按钮类似于多选题,可任意选择其中的几个、全部选项或一个都不选。
它们的属性中最常用的是 Checked,设计时一组单选按钮中只能设置其中一个的Checked 为 True 作为默认值,复选按钮则可以任意设置。代码中经常通过对 Checked 值的判断进行程序流程控制,如任务中的多个IF语句。
任务中用到了RadioButton的Click() 事件,CheckBox与此相似。另外还有一个常用事件CheckedChanged(),对于它,应该很熟悉了。
3.PictureBox控件
PictureBox控件称为图片框,能用于显示多种格式的图形图像。设计时可通过Image属性加载图片,任务中即如此。在图 1-28所示对话框中选择资源有两种方式:一是本地资源,该方式图片文件保留在原地,实际上是建立了一链接;另一种方式是项目资源文件,这种方式将图片文件复制到Resources文件夹下。两种方式各有利弊,可根据应用需要选择。
如果要清除图片,可在“属性”窗口中选择 Image 属性,并右击出现在图像对象名称左边的小缩略图像,选择“重置”。
图片框与图片在大小及高宽比例上的差异可通过 SizeMode 来调节,任务中的 ZOOM为按比例缩放,其他选项的含义请自行探索。
若要在程序运行时加载图片,可用以下方法:
PictureBox2.Image = Image.FromFile("E:\unit\04.jpg")
小试身手
请分别设计单选题和多选题的界面。
任务4 容器
任务要求
在上一个任务的基础上增加“政治面貌”信息,并优化布局。
任务分析
一个应用程序界面通常会分成几个功能区域,在此将窗体拆分为上、下两个区域,上窗口用于输入,下窗口用于输出。
任务要求增加政治面貌,其选项可分为群众、团员、共产党员和民主党派,单选。这时就出现了新问题,窗体上的6个单选按钮混淆不清,因而需将它们分组。
任务解决方案
步骤1:新建窗体
在项目“project1-2”中添加 Windows 窗体,窗体名为 xsdanew,其他设置与上个任务相似。
步骤2:添加SplitContainer控件
在工具箱“容器”中双击 SplitContainer 添加一个 SplitContainer1 控件,该控件由Panel1 和 Panel2 两部分组成。选中 SplitContainer1(用右键快捷菜单较方便),修改Orientation属性值为Horizontal,界面如图1-29所示。
图1-29 SplitContainer水平拆分
步骤3:调节区域大小
将鼠标移到中间分隔线上,当鼠标呈上下双向箭头时向上、向下拖曳,调节面板的大小。
步骤4:复制控件
用复制的方法将图1-27中的控件分别复制到Panel1和Panel2中,其中用于显示的文本框在Panel2中,其余皆在Panel1中,如图1-30所示,调整面板的大小和控件位置(要使控件在Panel中居中,同样可用“格式”菜单中的“在窗体中居中”)。
图1-30 Panel布局
步骤5:给单选和复选按钮分组
双击工具箱“容器”中的Panel,这时在窗体上增加了一个Panel,其name为Panel1,无显示文本。选中两个单选按钮、剪切,选中 Panel1、粘贴,然后如图1-30所示、调节它们的位置和大小。3个复选按钮同样操作后放置在新建的Panel2中。
步骤6:添加政治面貌选项
添加政治面貌标签和 Panel3,调整它们的位置和大小。单击工具箱中的单选按钮,在Panel3的范围内拖曳,依次添加4个单选按钮。如图1-31所示调节各控件的位置。
图1-31 最终布局
步骤7:测试程序
运行后可发现所有虚线框都消失了。
能力拓展
性别和政治面貌的选项都是由单选按钮组成的,试着分析去掉 Panel1、Panel3 前后有何区别。
知识梳理
1.容器
容器是指能包容其他对象的对象,如前面讲过的窗体。容器对象从逻辑上封装其他对象从而形成逻辑层次,在本任务中,窗体是最高层,SplitContainer1 将窗体分为两个面板Panel1 和 Panel2,这是第二层,第二层上除姓名、年龄标签和文本框等控件外还有容器Panel1、Panel2和Panel3,它们均处于第三层,Panel1、Panel2和Panel3中的对象则处于第四层。只要将对象移动或添加到容器虚框范围内,则该对象包容于该容器,将对象移出容器虚框则解除包容关系。
VB.NET 的容器仅从逻辑上封装其他对象,因而对象的调用无须指定父容器,从而避免了过长的路径,例如,将前一任务的代码复制到本任务中就能直接使用。当然需要时也可指定,后面集合中有相关介绍。
除窗体外其他容器都用于控件的分组。对控件分组的原因有三个:第一是为获得清楚的用户界面而将相关窗体元素进行可视分组;第二是编程分组,例如对单选按钮进行分组;最后一个原因是为了在设计时将多个控件作为一个单元来移动。其中编程分组知识将在集合部分学习。
2.与容器有关的属性及操作
(1)Anchor属性
该属性可设置控件绑定到的容器的边缘并确定控件如何随其父级一起调整大小。除窗体外,每个控件和容器均有该属性。
(2)Dock属性
该属性定义要绑定到容器的控件边框,如选择 Right 则控件的右边框与父容器的右边绑定。
(3)在父容器中停靠
操作前首先要选中容器,选中后分组容器的右上角都有一个黑三角,单击打开,其中有一个选项即为“在父容器中停靠/取消在父容器中停靠”。当控件在父容器中停靠时,容器将充满整个父容器,该操作取决于Dock属性是否设置为Fill。
(4)移动控件和调节大小
选中容器后除右上角的黑三角外其左上角有一个十字形箭头(在父容器中停靠除外),可拖曳移动容器。当然,无论位置或是大小均可通过属性窗口精确调节。
除以上属性外还有边框线等的设置,如任务运行时虚线都消失,分区不明显,可以将SplitContainer1的BorderStyle属性改为FixedSingle即能显示边框线。
(5)Margin/Padding
Margin 属性指定该控件与另一控件边距之间的距离;Padding 属性指定控件内部的间距,是容器特有的。它们均由上、下、左、右4个参数组成。
3.常用容器
(1)Panel和GroupBox
这二者功能相似,区别是Panel可以有滚动条而无标题,GroupBox 正好相反。
(2)SplitContainer
该控件相当于由两个 Panel 和一个拆分器组成,通过拆分器可以调节这两个 Panel 的大小,因而其特有属性较多,主要如下。
① Orientation属性
该属性决定拆分器的方向,当该属性设置为 Vertical 时,拆分器将垂直放置,从而产生左面板和右面板;当该属性设置为Horizontal时,将产生上、下面板。
② FixedPanel属性
该属性决定调整 SplitContainer 控件大小后,哪个面板将保持原来的大小。
③ IsSplitterFixed属性
该属性决定是否可以通过键盘或鼠标来移动拆分器。
(3)TabControl
该控件显示多个选项卡,选项卡中可包含图片和其他控件。可以使用该选项卡控件来生成多页对话框,还可以用来创建用于设置一组相关属性的属性页。
该控件的 TabPages 属性指定选项卡的数目。每一个单独的选项卡都是一个 TabPage 对象。单击选项卡时,将为该TabPage对象引发 Click 事件。
PictureBox2.Image = Image.FromFile("E:\unit\04.jpg")
小试身手
继续完善单选题和多选题界面,增加“已做”和“未做”标记。
模块3 系统对话框的使用
任务要求
任务1 OpenFileDialog和SaveFileDialog的使用
利用VB.NET创建一个Windows应用程序,用来将一个文本文件或rtf文件中的内容读取并显示出来,要求仅能够读取指定格式的文件,并能将修改后的文件以相应的格式保存到相应的文件名中。
任务分析
(1)若要打开或保存一个指定的文件,在 Visual Studio 2005 中系统提供了OpenFileDialog和SaveFileDialog两个控件可以实现。
(2)打开文件后必须有一个控件来接收并显示其中的内容,可以借助于RichTextBox来完成。
(3)应用程序与用户之间的交互命令可以借助菜单也可以通过按钮来实现,在本任务中通过设置3个按钮“打开”、“保存”、“退出”来实现。
任务单
(1)启动Visual Studio 2005,新建一个项目;
(2)添加控件,设置控件属性;
(3)添加控件代码;
(4)测试程序。
任务解决方案
步骤1:启动Visual Studio.net,新建一个项目Project1-3
单击“开始”|“程序”|“Microsoft Visual Studio 2005”|“Microsoft Visual Studio 2005”命令菜单,执行“文件”|“新建项目”命令,在 “新建项目”对话框的“项目类型”列表中选择“Visual Basic”,在“模板”列表中选择“Windows 应用程序”,名称为“Project1-3”、位置为E:\unit1。
步骤2:添加控件,设置控件属性
在 Form1 窗体上添加一个 RichTextBox 控件、一个 OpenFileDialog 控件、一个SaveFileDialog控件、三个Button控件,其中OpenFileDialog和SaveFileDialog控件在系统托盘中显示。修改 Form1 的 Text 属性为“小小记事本---文档 1”,如图1-32所示。将其余控件的属性按表1-2进行设置。
表1-2 控件的属性
图1-32 Form界面
步骤3:添加控件代码
(1)双击“退出”按钮,添加代码。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Application.Exit() End Sub
(2)双击“打开”按钮,添加代码。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click OpenFileDialog1.Title = "打开" SaveFileDialog1.FileName = "" OpenFileDialog1.Filter = "rtf(*.rtf)|*.rtf|txt(*.txt)|*.txt" OpenFileDialog1.DefaultExt = "*.rtf" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And OpenFileDialog1. FileName.Length > 0 Then DisplayText.LoadFile(OpenFileDialog1.FileName) End If End Sub
(3)双击“保存”按钮,添加代码。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SaveFileDialog1.Title = "保存" SaveFileDialog1.FileName = "文档1.rtf" SaveFileDialog1.Filter = "rtf(*.rtf)|*.rtf|txt(*.txt)|*.txt" SaveFileDialog1.DefaultExt = "*.rtf" If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK And SaveFileDialog1. FileName.Length > 0 Then DisplayText.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.RichText) End If
步骤4:测试程序
执行菜单命令“调试”|“启动”或按 F5 键测试该程序。单击“打开”按钮显示打开文件对话框,然后可以选择一个txt或rtf格式的文件,打开后文件显示在RichTextBox中,当单击“保存”按钮时,先显示另存为文件对话框将RichTextBox中的内容保存在给定的一个文件名中。单击“退出”按钮,退出应用程序。
能力拓展
该项目中打开和保存的文档只能是 txt 或 rtf 格式,那么可以打开其他类型的文档吗?可以的话代码需要如何修改?
自主探究
(1)如果指定打开的文件类型是.doc、.txt、.rtf 或所有文件中的一种时,可以通过什么属性来进行设置?如何对该属性赋值?
(2)在 OpenFileDialog 对话框打开后,用户如何知道打开的文件名?是通过什么属性实现的?
(3)当用户调用了一个 ShowDialog()方法在打开或保存的对话框中单击了“打开”或“保存”按钮时,程序代码中如何对此进行判断?DialogResult 是一个什么样的数据类型?它提供了哪些值?
知识梳理
1.CommonDialog类
对话框是一个在另一个窗口中显示的窗口,通过对话框可以让用户与应用程序随时进行信息交互。通用对话框常常用于从用户处获取一般性的信息,类似于 Windows 中经常用到的一些标准的对话框,比如文件的打开、保存及打印等。.NET 提供了通用对话框CommonDialog 类,在用户开发的应用程序中可以通过这些通用对话框类来快速实现特殊对话框的功能。
CommanDialog 是对话框的基类,其中每个类用于提供特定的功能。所有对话框的使用方式都是类似的,其方法常用的是 ShowDialog()和 Reset(),ShowDialog()用来显示对话框,并返回一个DialogResult实例;而Reset()则把对话框的属性设为默认值。
CommonDialog类中包括以下几个常见的类:
(1)FileDialog
(2)ColorDialog
(3)FontDialog
(4)PrintDialog
(5)PrintPreviewDialog
FileDialog 类用于处理文件操作,例如打开或保存一个文件。FileDialog 类是由OpenFileDialog 类和 SaveFlieDialog 类组成的,它们分别对应 OpenFileDialog 对话框和SaveFlieDialog 对话框。在 VB.NET 中,只有 OpenFileDialog 和 SaveFileDialog 对话框控件,而没有FileDialog控件。
2.OpenFileDialog类
(1)OpenFileDialog类的使用
如果用户需要一个打开文件的对话框,只要从工具箱中拖放一个OpenFileDialog控件即可,此时该控件放在窗体的系统托盘中,与其他控件不同的一点是该控件在运行时不会自动显示,它需要通过调用ShowDialog()方法来显示。
例如:向窗体拖放一个控件OpenFileDialog1,然后在Button1按钮的单击事件处理程序中通过如下代码来实现在窗体中单击Button1按钮后显示一个打开文件的对话框:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.ShowDialog() End Sub
OpenFileDialog 类提供了标准的“打开”对话框,该对话框由 Windows 提供,它主要用于向用户提供文件选择功能。OpenFileDialog类利用ShowDialog()方法来显示对话框,用户选择的参数可以通过对话框控件的相关属性来传递。OpenFileDialog 类的常用属性如表1-3所示。
表1-3 OpenFileDialog类的常用属性
在打开文件对话框中,用户可以设置需要打开的文件类型,也可以指定默认的文件类型。属性 Filter 用于指明需要打开的文件类型,FilterIndex 属性通过索引号来指明默认的文件类型。如下示例指明了打开该文件的三种类型及默认的文件类型为*.rtf:
OpenFileDialog1.Filter="Text documents (*.txt)|*.txt|rtf文件(*.rtf)|*.rtf|All Files |*.*"; OpenFileDialog1.FilterIndex=2
筛选器可以显示多个部分,每个部分用“|”分隔符分开,且每个部分都需要由两个字符串组成,第一个字符串定义在列表中显示的文本,如 Text documents (*.txt)、rtf 文件(*.rtf)、All Files,第二个字符串用于指定要在对话框中显示的文件扩展名,如*.txt、*.rtf 、*.*,且筛选器的前、后都不允许有空格。
当程序中通过 DialogShow()方法调用一个对话框后,该方法返回一个 DialogResult 实例,其值有None、No、OK、Abort、Cancel、Ignore、Retry、Yes,默认值是None。根据单击的按钮是“确定”还是“取消”,对话框将返回 DialogResult.OK 或 DialogResult.Cancel。如果单击了“确定”按钮,则通过对话框的 FileName 属性返回文件的文件名,单击了“取消”按钮,则 FileName 属性值是一个空字符串。如果选择了“打开”按钮,选中的文件名通过FileName属性返回,当MultiSelect属性设置为True时,表示用户可以选择多个文件,此时FileName返回一个由所有选中文件的文件名组成的字符串数组,但FileName属性所包含的文件顺序与选中它们的顺序相反,即 FileName 数组中的第一个字符串是最后选中的一个文件的文件名。
(2)RichTextBox控件与文件的读写
.NET 提供了两个方法,即 LoadFile()与 SaveFile()方法,LoadFile()方法用于将文件中的内容读取出来放入RichTextBox中,SaveFile()方法用于将RichTextBox控件中的内容写入文件。简单用法如下:
RichTextBox1.LoadFile(OpenFileDialog1.FileName) RichTextBox1.SaveFile(SaveFileDialog1.FileName)
其中,OpenFileDialog1.FileName 指明要加载到控件中的文件名和路径,文件可以是 rtf格式或标准ASCII格式的文本文件。
说明:
FileName属性的值包含文件所在路径和文件名,即文件的绝对路径。
3.SaveFileDialog类
SaveFileDialog类提供了标准的“保存”对话框,它也是由Windows提供的。使用这个对话框可以向用户提供保存文件的功能。SaveFileDialog 类的使用同 OpenFileDiaolg 类,只是所用的属性稍有不同,常用的属性如表1-4所示。
表1-4 SaveFileDialog类的常用属性
小试身手
试着编写一个 VB.NET 应用程序,要求能够将选定的文件内容读出来放入一个RichTextBox控件内,文件可以是txt文件或rtf文件,并且在窗体的标题栏中显示所打开文件的详细路径。效果如图1-33所示。
图1-33 练习
任务2 ColorDialog和FontDialog的使用
任务要求
项目 Project1-3 能够读写指定格式的某个文件,但是文档中文字的格式比较单一,为了使文字的格式更加丰富,请修改该项目,增加文字设置和颜色设置的功能,使文档更加美观。
任务分析
(1)在Visual Studio 2005中颜色的设置可以用ColorDialog控件实现;
(2)字体的设置可以用FontDialog控件实现。
任务单
(1)打开项目Project1-3,添加控件,设置控件属性;
(2)添加控件代码;
(3)测试程序。
任务解决方案
步骤1:打开项目Project1-3,添加控件,设置控件属性
启动 Visual Studio 2005,打开项目 Project1-3,然后添加两个 Button 控件,一个ColorDialog控件,一个FontDialog控件,如图1-34所示,并将各控件的属性按表1-35所示进行设置。
图1-34 应用程序界面
表1-5 新增控件的属性
步骤2:添加控件代码
(1)双击“Font”按钮,添加代码。
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click FontDialog1.ShowColor = True FontDialog1.ShowDialog() DisplayText.ForeColor = FontDialog1.Color DisplayText.Font = FontDialog1.Font End Sub
(2)双击“Color”按钮,添加代码。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click ColorDialog1.AllowFullOpen = True ColorDialog1.SolidColorOnly = False ColorDialog1.ShowDialog() DisplayText.ForeColor = ColorDialog1.Color End Sub
步骤3:测试程序
执行菜单命令“调试”|“启动”或按 F5 键测试该程序。当单击“字体”按钮时会弹出字体设置对话框,然后对打开的一个 rtf 格式文件中的文字进行字体的设置;当单击“颜色”按钮时会弹出颜色设置对话框,通过这个对话框可以设置打开文件中字体的颜色。
能力拓展
项目中的字体和颜色的设置都是以全文档的方式进行的,能不能单独设置一部分文字的字体和颜色?如果要修改,则代码如何修改?
自主探究
(1)该项目中的字体设置也有颜色的设置,考虑到已经有颜色设置的按钮了,能不能将字体设置中包含的颜色设置的功能去掉呢?如果可以的话,代码要如何修改?
(2)在对文本设置字体时,字体的设置信息一般包括几部分?分别是什么?
(3)如果用户还需要设置文本的背景色,该如何进行?
知识梳理
1.FontDialog控件
FontDialog 类的使用可以方便用户选择字体,允许用户改变字体、样式、字号和字体的颜色。其用法与前两个对话框相似,通过 ShowDialog()方法显示 FontDialog 对话框,单击“确定”按钮后对话框返回一个值,即 DialogResult.OK,利用 Font 属性可以读取选中的字体,如果将该属性值送给相应控件的 Font 属性,则可以实现按要求设置对象的字体。其常用的属性如表1-6所示。
表1-6 FontDialog控件的常用属性
2.ColorDialog控件
ColorDialog 类提供允许用户从调色板选择颜色以及把颜色添加到调色板的功能,控件的常用属性如表1-7所示。
表1-7 ColorDialog控件的常用属性
小试身手
试着编写一个 VB.NET 应用程序,借助通用对话框通过不同的按钮实现文本框中文本的颜色和字体的设置,同时还能将 RichTextBox 中的内容存入一个 rtf 格式的文件中。在RichTextBox 中的内容没有保存过时,标题栏显示“小小记事本---文档 1.rtf”,如果保存过,则窗体的标题栏显示“小小记事本---文件的文件名”,界面如图1-35所示。
图1-35 练习
任务3 PrintDialog和PrintPreviewDialog的使用
任务要求
一个应用程序的功能大多数都包含打印与打印预览的功能。当一个文档编辑结束以后还需要打印出来,一般来说,打印之前为了确保打印的质量还需要预览一下,请设计一个应用程序,实现简单的打印及打印预览功能。
任务分析
(1)在Visual Studio 2005中打印预览功能可以用PrintPreviewDialog控件实现;
(2)打印功能可以用PrintDialog控件实现。
任务单
(1)打开项目,添加控件,设置控件属性;
(2)添加控件代码;
(3)测试程序。
任务解决方案
步骤1:打开项目Project1-3,添加控件,设置控件属性
启动 Visual Studio 2005,打开项目 Project1-3,然后添加两个 Button 控件、一个PrintDialog 控件、一个 PrintPreviewDialog 控件和一个 PrintDocument 控件,如图1-36所示,按表1-8设置控件属性。
表1-8 新增控件的属性
图1-36 应用程序界面
步骤2:添加控件代码
(1)双击“打印预览”按钮,添加代码。
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
(2)双击“打印”按钮,添加代码。
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click PrintDialog1.Document = PrintDocument1 PrintDialog1.ShowDialog() End Sub
(3)双击“PrintDocument1”控件,添加 PrintPage()事件处理程序代码,该方法由系统通过PrintDocument1自动调用。
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System. Drawing. Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage '通过DrawString()方法可以使用字号为28个像素点的Arial字体、加粗、红色画笔,在坐标 (30,20)的位置开始输出文本内容;Graphics类的方法可以在打印纸张上绘制出有关的文本内容; e.Graphics.DrawString(DisplayText.Text, New Font("Arial", 28, FontStyle. Underline), Brushes. Red, 30, 20) End Sub
步骤3:测试程序
执行菜单命令“调试”|“启动”或按 F5 键测试该程序。单击“打印预览”按钮弹出预览窗口,RichTextBox 中的内容即会在窗口中显示出来,如图1-37所示,可查看本文档打印的效果。
图1-37 缩放25%后的预览效果
说明:
(1)如果要出现预览的效果,计算机必须安装打印机的驱动程序。
(2)由于打印功能比较复杂,这里仅介绍最简单的打印文本的方法,且在本任务中不能对字体的大小、颜色等进行控制,只是通过 Graphics.DrawString()方法预览固定的字体大小、颜色等来显示相应的信息。
能力拓展
一般来说,在打印之前还需要设置纸张的大小,上、下、左、右页边距,以及纸张是横排还是竖排,那么在VB.NET中是如何进行页面设置的呢?
自主探究
(1)打印与打印预览在使用上有什么异同?
(2)在应用程序中能够实现打印与打印预览,其前提条件是什么?
知识梳理
在 Visual Studio 2005 中实现打印预览时需要用到两个类,即 PrintDocument 类和PrintPreviewDialog类,如果实现打印则需要使用PrintDocument类和PrintDialog类,它们分别对应工具箱中的3 个控件,其中PrintDocument控件是一个最重要的控件,它用于设置要打印或预览内容的属性,通过PrintDocument控件的PrintPage事件来指定需要打印或预览的内容。
在 Visual Studio 2005 中要调用默认的打印对话框或打印预览对话框,一个简单的方法是通过拖放一个 PrintDialog 控件或 PrintPreviewDialog 控件,以及一个 PrintDocument 控件到设计窗体中来实现。与通用对话框的使用相似,添加后的控件显示在系统托盘中,当运行应用程序时,需要将对话框显示在窗体中,可通过 ShowDialog()方法来实现,通过DialogResult获取用户在打印对话框中单击的按钮,如果要使用打印功能,则在Windows应用程序中调用Print()方法即可进行打印。
1.PrintPreviewDialog类
在实际打印之前,可以使用Windows提供的PrintPreviewDialog控件预览文档,该控件提供了一个对话框,该控件还允许用户打印、放大、设置页面布局选项和在页面间切换、关闭对话框。
要想实现打印预览,需要将 PrintPreviewDialog 控件的 Document 属性设置为某个PrintDocument对象,用来表示将要打印的文档。如:
PrintPreviewDialog1. Document=PrintDocument1
打印预览对话框也可以看成是一个窗体,因为它拥有作为一个窗体所拥有的所有属性。PrintPreviewDialog类的常用属性如表1-9所示。
表1-9 PrintPreviewDialog类的常用属性
2.PrintDialog类
PrintDialog类提供标准的Print对话框,由Windows提供。使用这个对话框处理与打印有关的操作,例如指定打印机或者打印的页。PrintDialog类使用户可以打印一个文件的所有页、打印指定规范的页,或者打印选定的区域。使用这个类的 ShowDialog 方法可显示 Print对话框,可以操作这个类的属性来指定单个打印工作的设置或者一台打印机的设置,其常用属性如表1-10所示。
表1-10 PrintDialog类的常用属性
小试身手
如果有如图1-38所示Form1窗体及“Preview”按钮事件处理程序,请完善应用程序,实现对RichTextBox中的内容进行预览。
图1-38 Form1窗体
“Preview”按钮事件处理程序:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim PrintDocument1 As System.Drawing.Printing.PrintDocument = New System.Drawing. Printing. PrintDocument() Dim PrintPreviewDialog1 As PrintPreviewDialog = New PrintPreviewDialog() PrintPreviewDialog1.MaximizeBox = False PrintPreviewDialog1.Text = "打印预览窗口" PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub