Visual Basic是一种可视化的、面向对象的和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows环境下的各类应用程序。它简单易学、高效而且功能强大。在Visual Basic环境下,Windows的编程复杂性被巧妙地封装起来,利用事件驱动的编程机制和可视化的设计工具,使用Windows的应用程序接口(API)函数、动态链接库(DLL)、动态数据交换(DDE)、对象链接与嵌入(OLE)、开放式数据库连接(ODBC)等技术,程序员可以方便地建立图形对象,高效、快速地开发出功能强大、图形界面丰富的应用程序系统。
本章知识结构:
3.1 Visual Basic基本常识
3.1.1 Visual Basic集成开发环境
1、Visual Basic的特点
总结Visual Basic的特点,有如下几条:
(1)可视化编程;
(2)面向对象的程序设计;
(3)结构化程序设计语言;
(4)事件驱动编程机制;
(5)数据库访问能力;
(6)其它功能:动态链接库(DLL)、动态数据交换(DDE)、对象链接与嵌入(OLE),Internet组件下载等。
关于Visual Basic的特点的记忆,学习者可以通过学习后面的知识加以体会,不必急欲强行理解。
2、Visual Basic的集成开发环境
要想掌握一门语言并灵活地使用该语言工作,则必须了解和掌握该语言提供的工作环境。启动Visual Basic,打开如图3-1所示的集成开发环境。
图3-1 Visual Basic集成开发环境
(1)窗体设计器窗口
窗体设计器窗口简称窗体(Form),是应用程序最终面向用户的窗口,它对应于应用程序的运行结果。各种图形、图像、和数据等都是通过窗体或窗体中的控件显示出来的。Visual Basic应用程序的绝大部分工作都是在窗体上完成的,所以说,窗体是Visual Basic的主要工作界面。
(2)工程资源管理器窗口
该窗口含有建立应用程序所需要的所有文件的清单。文件的类型有:窗体文件(.frm)、程序模块文件(.bas)、类模块文件(.cls)、工程文件(.vbp)、工程组文件(.vbg)、资源文件(.res)。
(3)属性窗口
属性窗口主要用于在设计阶段对窗体及其控件进行属性设置。窗口中,属性可以按字母顺序进行排列,也可以按分类进行排序。在实际应用中,没有必要对某个对象的所有的属性进行设置,很多属性可以取默认值。
(4)工具箱窗口
工具箱窗口由工具图标组成,这些工具图标被称为图形对象或控件,主要用于应用程序的界面设计。
3、Visual Basic的其它窗口
在图3-1中,显示了Visual Basic集成环境中的主要窗口,除此之外,还有一些窗口需要关注的。例如,调色板窗口、立即窗口、代码编辑窗口、本地窗口以及监视窗口等
(1)代码编辑窗口
代码编辑窗口如图3-2所示。
图3-2 代码编辑窗口
代码编辑窗口用于编写、显示和修改Visual Basic的程序代码,用户可同时打开多个代码编辑窗口。代码编辑窗口中含有对象框、过程/事件框、代码编辑区、过程查看图标和全模块查看图标。
(2)调试窗口
调试窗口包括立即窗口、本地窗口和监视窗口,这些窗口只有在运行应用程序时才有效。
使用立即窗口可以在中断状态下查询对象的值,也可以在设计时查询表达式的值或命令的结果。
在本地窗口内可自动显示所有在当前过程中的变量声明及变量值。
监视窗口是用来监视各种变量和表达式的。将变量和表达式加到监视表达式列表中,可选出想要VB监视的表达式。
3.1.2 Visual Basic对象及其操作
1、对象的概念
对象是程序可以控制的运行实体,是能够把数据(属性)和代码(行为方式)看为一个整体的集合。程序依靠对象的特定动作来完成特定的任务。Visual Basic的对象具有封装性和继承性。
对象由三大要素构成,即属性、方法和事件。
(1)属性
属性是指描述对象的一组特征。不同的对象具有不同的属性。改变对象的属性即改变对象的特征。
对象常用属性:名称(Name)、标题(Caption)、字体(Font)、颜色(Color)、有效性(Enabled)、可见性(Visible)。
对象的属性可以在属性窗口中设置,也可以在程序中用代码来设置。在程序中的设置方法:
【格式】对象名.属性名=属性值
【功能】给对象的属性赋值。
(2)方法
方法指对象要执行的某些特定动作。可以把方法理解成对象的内置函数,用户可以直接调用。
常用的方法有打印(Print)、显示(Show)、移动(Move)、清空(Cls)等。
方法的操作和过程、函数的操作相同,其调用格式是:
【格式】 对象名.方法名 [参数列表]
【功能】 调用对象的方法。
(3)事件
事件是由Visual Basic预先设置好的,能被对象识别的动作以及由动作引发的结果。引发的结果需要编写代码来设定,这段代码称为事件过程。
常见的事件主要有:单击(Click)、双击(DblClick)、装入(Load)、键按下(KeyPress)、鼠标移动(MouseMove)等。不同的对象能识别不同的事件。
事件过程的一般格式如下:
Private Sub 对象名_事件名([参数列表])
……
事件响应程序代码
……
End Sub
2、窗体
窗体是创建应用程序的基础。窗体对象是Visual Basic应用程序的基本构造模块,是运行应用程序时与用户交互操作的实际窗口。
窗体有自己的属性、方法和事件,控制窗体的外观和行为。可以通过使用属性定义窗体的外观;用方法定义窗体的行为;用事件定义窗体与用户的交互。
(1)属性
窗体常见的属性见表3-1。窗体属性供分为7大类:
● DDE类:控制对象间的对话。 ● 缩放类:用于调整控件位置或使用图形方式时的缩放控制。
● 外观类:控制窗体的外部形态。 ● 位置类:控制窗体在屏幕上的位置。
● 行为类:控制窗体的行为动作。 ● 杂项类:没有规律的一些属性。
● 字体类:设置窗体标题等文字的显示方式。
(2)方法:
窗体常用的方法不多,见表3-2。
表3-2 窗体常用的方法
方 法 | 描 述 | 方 法 | 描 述 |
Add | 添加一个成员到Collection对象 | PrintForm | 用以将Form对象的图象逐位发送给打印机。 |
Cls | 清除运行时Form或PictureBox所生成的图形和文本。 | SetFocus | 将焦点移至指定的控件或窗体。 |
Hide | 用以隐藏MDIForm或Form对象,但不能使其卸载。 | Show | 用以显示MDIForm或Form对象。 |
属 性 | 描 述 | 属 性 | 描 述 |
AutoReDraw | 控制屏幕图像的重画 | MaxButton | 显示窗体右上角的最大化按钮 |
BackColor | 设置窗体的背景颜色 | MinButton | 显示窗体右上角的最小化按钮 |
BorderStyle | 确定边框的类型 | Name | 定义窗体的名称 |
Caption | 定义窗体的标题 | Picture | 在窗体中显示图形文件 |
ControlBox | 设置控制框的状态 | Top、Left | 设置窗体上边和左边的坐标值 |
Enabled | 定义窗体可用或不可用 | Height、Width | 设置窗体的高度和宽度 |
ForeColor | 定义文本和图形的前景颜色 | Visible | 设置窗体的可见性 |
Icon | 设置窗体最小化时的图标 | WindowState | 设置窗体初始显示、操作状态 |
常用的窗体事件有以下几种:
● 单击(Click)事件:在对象上按一次鼠标左键时发生。
● 双击(DblClick)事件:在对象上连续按两次鼠标左键时发生。
● 键盘事件——KeyDown:按下某键时发生。KeyUp:放开某键时发生。
KeyPress:按某些特定的键(字母、数字、符号键)时发生。
● Load(装入事件)——在装入窗体时发生,可用于在启动程序时进行初始化。
● UnLoad(卸载事件)——在内存中清除一个窗体或对象时发生。
● Activate(活动事件)——当窗体变成活动窗体时发生。
● Deactivate(非活动事件)——当另一个窗体变成活动窗体时发生。
● Paint(绘画事件)——当窗体被移动、被放大,或在移动时覆盖了一个窗体时发生。
● Initialize(初始化事件)——在创建窗体对象的一个实例时发生。
3、控件
(1)控件的分类
Visual Basic控件分为三类:
● 标准控件:由Visual Basic的可执行文件提供,启动后出现在工具箱里,但不能添加和删除。
● ActiveX控件:是扩展名为.ocx的文件,又称为OLE控件或定制控件。
● 可插入控件:指可添加到工具箱中的对象,当伪控件使用。
(2)控件的命名和控件值
为了提高程序的可读性,最好用一个有意义的名字为控件的Name属性赋值,通过该值,可以看出对象的类型和用途。表3-3列出了窗体和内部控件建议的使用的前缀。
同时,为了方便使用,Visual Basic为每一个控件规定了一个默认值,在设置这样的属性时,不必给出属性名,通常把该属性称为控件的值。例如:文本框的控件值为“Text”,则:
Text1.text=“欢迎使用Visual Basic6.0”
等同于: Text1=“欢迎使用Visual Basic6.0”
表3-3列出了部分控件的控件值。
表3-3 Visual Basic对象命名约定和控件值。
对 象 | 前 缀 | 控件值(属性) | 对 象 | 前 缀 | 控件值(属性) |
Form | Frm | Timer | Tmr | ||
PictureBox | Pic | Picture | DriveListBox | Drv | Drive |
Label | Lbl | Caption | DirListBox | Dir | path |
Frame | fra | Caption | FileListBox | Fil | Filename |
CommandButton | Cmd或btn | Value | Shape | Shp | Shape |
CheckBox | chk | Value | Line | lin | Visible |
OptionButton | Opt | Value | Image | Img | Picture |
ComboBox | Cbo | Text | Data | Dat | caption |
listBox | Lst | OLE | ole | ||
HScrollBar | Hsb | Value | DBCombo | Text | |
VScrollBar | Vsb | Value | DBGrid | Text | |
CommonDialog | Cdl | Action | DBList | Text | |
Grid | grd | Text | txt | text |
1、选择题:
(1)与传统的程序设计语言相比,Visual Basic最突出的特点是
A)结构化程序设计 B)程序开发环境
C)事件驱动编程机制 D)程序调试技术
解析:本题测试的是Visual Basic的特点。Visual Basic与传统的程序设计语言相比较,既有相同的特点,也有不同的地方。最大的不同是传统的程序设计语言是面向过程的,数据和操作是分离的,程序的执行是按事先规定的次序进行的;而Visual Basic是面向对象的,数据和操作是封装的,是通过事件驱动程序调用过程来执行指定的操作,不必建立具有明显的开始和结束的程序。
答案:C
(2)下列不能打开“属性窗口”的操作是
A)执行“视图”菜单中的“属性窗口”命令 B)按F4键
C)单击工具栏上的“属性窗口”按钮 D)按“Ctrl+T”组合键
解析:本题测试的是属性窗口的启动方法。在Visual Basic中,如果属性窗口未被打开,则有四种方法可以将其打开。分别是执行“视图”菜单中的“属性窗口”命令;按F4键;单击工具栏上的“属性窗口”按钮;在窗体设计器中,右击某一对象,在出现的快捷菜单中单击“属性窗口”菜单项。
答案:D
(3)在Visual Basic的集成环境中,下列“保存工程”菜单命令的热键是
A)A1t + E B)Ctrl + S
C)A1t + O D)Ctrl + O
解析:本题测试的是工程文件保存的热键方法。Visual Basic的集成环境中,有很多菜单命令都有相应热键以方便编程人员的快速操作,对于一些常用命令的热键,程序员应该会熟练的操作。如:
“打开工程”命令: Ctrl + O ; “新建工程”命令: Ctrl + N
“保存工程”命令: Ctrl + S ; “运行程序”命令: F5
“单步调试”命令: F8
答案:B
(4)以下可以产生工程组文件(.vbg)的情况为
A)当一个程序包含两个以上工程时 B)当一个程序包含两个以上窗体时
C)当一个程序包含两个以上类模块时 D)当一个程序包含两个以上程序模块时
解析:本题测试的是工程文件组的概念。当一个程序包含两个以上的工程时,此时工程构成一个工程组,工程组文件的扩展名是.vbg。其中g表示group(组)的含义。
答案:A
(5)以下不属于Visual Basic系统的文件类型是
A).frm B).bat C).vbg D).vbp
解析:本题测试的是Visual Basic文件的类型。.frm 是窗体文件的扩展名;.vbg 是工程组文件的扩展名;.vbp 是工程文件的扩展名;.bat 是批处理文件的扩展名。将一些命令放在一个扩展名为.bat批处理文件中,执行该文件时,计算机逐条执行文件中的每一个命令,可以减少交互的时间。
答案:B
(6)在刚刚建立的一个新的标准EXE工程后,不在工具箱中出现的控件是
A)单选钮 B)图片框 C)通用对话框 D)文本框
解析:Visual Basic的常用控件包括单选按钮(OptionButton)、图片框(PictureBox)、文本框(TextBox)等在内一共有20种。通用对话框(commondialog)控件必须在工具箱上单击鼠标右键选择“部件”,当选中“Microsoft Common Dialog Control”后才能出现在工具箱上。
答案:C
(7)确定一个控件在窗体上的位置的属性是
A)Width 和 Height B)Width 或 Height
C)Top 或 Left D)Top 和 Left
解析:本题测试的是控件在窗体上的位置性质。Width 是宽度参数,Height是高度参数。Top是上端位置参数,Left是左端位置参数。所以,Top 和 Left 确定了控件在窗体上的位置,而Width 和 Height确定了控件在窗体上的大小。
答案:D
(8)以下叙述中正确的是
A)窗体的Name属性指定窗体的名称,用来标识一个窗体
B)窗体的Name属性的值是显示在窗体标题栏中的文本
C)可以在运行期间改变对象的Name属性的值
D)对象的Name属性值可以为空
解析:本题测试的是窗体或控件的Name属性。Visual Basic中的对象都有一个Name属性,能够惟一标识该对象。Name属性不能为空,不能在程序运行时修改,只能在程序设计期间设置。窗体的Caption属性是显示在窗体标题栏中的文本。
答案:A
(9)以下关于窗体的描述中,错误的是
A)执行Unload Form1语句后,窗体Form1消失,但仍在内存中
B)窗体的Load事件在加载窗体时发生
C)当窗体的Enabled属性为False时,通过鼠标和键盘对窗体的操作都被禁止
D)窗体的Height、width属性用于设置窗体的高和宽
解析:本题测试的是窗体的Load属性。
窗体的Hide方法和Unload方法是有区别的,Hide方法是将装入内存的窗体隐藏,并没有从内存中卸载,而Unload方法是将窗体从内存中彻底清除。
窗体的Load事件用来在启动程序时对对象属性和变量进行初始化。程序运行时,将自动触发窗体的Load事件。
窗体的Enabled属性为False时,该窗体上所有控件,甚至包括窗体本身的操作都被禁止了。
窗体的Height、Width属性分别用于设置窗体的高度和宽度。
答案:A
(10)以下叙述中错误的是
A)双击鼠标可以触发DblClick事件 B)窗体或控件的事件的名称可以由编程人员确定
C)移动鼠标时,会触发MouseMove事件 D)控件的名称可以由编程人员设定
解析:本题测试的是属性Name的命名与修改问题。控件的名称Name属性可以由程序员设定,但也只能在程序设计时设置,不能在程序运行中修改控件的Name属性。窗体或控件的事件名称是由Visual Basic系统指定的,程序员不能修改。
答案:B
(11)程序运行后,在窗体上单击鼠标,此时窗体不会接收到的事件是
A)MouseDown B)MouseUp C)Load D)Click
解析:本题测试的是与窗体Click事件相关联的事件。在窗体上单击鼠标,分别触发窗体的MouseDown、MouseUp、Click事件过程,不会触发Load事件过程。
答案:C
(12)以下属于在程序运行阶段设置属性值的方法为
A)直接输入新属性的值 B)选择输入,即通过下拉列表选择所需要的属性值
C)使用代码直接改变某个属性的值 D)利用对话框设置属性值
解析:本题测试的是属性的设置方法。在设计阶段改变属性的方式有3种,其一,直接输入新同性的值;其二,选择输入,即通过下拉列表选择所需要的属性值;其三,利用对话框设置属性值。使用代码直接改变某个属性的值不能在设计阶段起作用,而是在程序运行阶段起作用。
答案:C
(13)要使Form1窗体的标题栏上显示"Hello!",以下语句正确的是
A)Form1.Caption='Hello'’ B)Form1.Caption="Hello!"
C)Form1.Caption=Hello! D)Form1_Caption="Hello!"
解析:本题测试的是在程序运行中设置属性的方法。如果要在程序运行中更改对象的属性,可以使用Visual Basic的赋值语句的格式是: 对象名.属性=新值 。
如果属性的值是字符串类型时,要用双引号引起该内容。
答案:B
(14)在某窗体中,有—按钮控件,其“Caption”属性的内容为“NEW”,其“Name”属性内容为“Create”,则单击(C1ick)该按钮产生的事件过程应是
A)Private Sub MnuNEW_C1ick( ) B)Private Sub Create_C1ick( )
C)Private Sub NEW_Click( ) D)Sub Mnu_Create_C1ick( )
解析:本题测试的是“Caption”属性和“Name”属性的区别。“Caption”是对象的标题,“Name”是对象的名称。而事件过程的一般格式如下:Private Sub 对象名_事件名([参数列表])。
答案:B
(15)有下列程序代码: Label1.Caption="等级考试" 。其中的Label1、Caption和"等级考试"分别代表
A)对象、值、属性 B)对象、方法、属性
C)对象、属性、值 D)属性、对象、值
解析:本题测试的是在程序代码中,属性的赋值方法。在程序代码中设置对象属性的语句的一般语法格式是:[对象名.]属性名=属性值。
答案:C
(16)如果希望一个窗体在显示的时候没有边框,应该设置的属性是
A)将窗体的标题(Caption)设成空字符 B)将窗体的Enabled属性设置成False
C)将窗体的BorderStyle设置成0 D)将窗体的ControlBox设置成False
解析:BorderStyle属性返回或设置对象的边框样式。它对Form(窗体)对象和Text(文本框)控件在运行时是只读的。ControlBox属性返回或设置一个值,指示在运行时控制菜单框是否在窗体中显示。在运行时为只读。窗体对象的BorderStyle的属性值:
0--None,没有边框或与边框相关的元素; 1-- Fixed Single,固定单边框;
2--Sizable,(默认值)可调整的边框; 3-- Fixed Dialog,固定对话柜;
4--Fixed ToolWindow,固定工具窗口; 5--Sizable ToolWindow,可变尺寸工具窗口。
答案:C
2、填空题:
(1)Visual Basic工具栏的右侧有两个栏,分别用来显示窗体的当前位置和大小,其单位为 【1】 ,1英寸等于 【2】 。
解析:本题测试的是Visual Basic集成开发环境主窗体的组成元素。打开Visual Basic集成开发环境,在主窗体上查看右侧两个栏的变化情况。
答案:【1】twip ;【2】1440 twip
(2)Visual Basic工程文件的扩展名是 【3】 ,窗体文件的扩展名是 【4】 。
解析:本题测试的是Visual Basic文件类型。Visual Basic文件的类型很多,主要有:窗体文件(.frm)、程序模块文件(.bas)、类模块文件(.cls)、工程文件(.vbp)、工程组文件(.vbg)、资源文件(.res)等。
答案:【3】.vbp ;【4】.frm
(3)通过 【5】 可以在设计时直观地调整窗体在屏幕上的位置
解析:本题测试的是Visual Basic各种工作窗体的功能。窗体在屏幕上的位置,可以直接通过鼠标拖动进行设置;可以通过窗体的各种位置属性进行设设置;更直接的方法是在“窗体布局窗口”中直接拖动,观看位置效果。
答案:【5】窗体布局窗口
(4)为了选择多个控件,可以按住 【6】 键,然后单击每个控件。
解析:本题测试的是控件的选择方法。在窗体上选择控件有两种方法:其一是,按住“Shift”键,然后单击每个要选的控件;其二是,将光标到窗体中适当的位置(没有控件),然后拖动鼠标画一个虚线矩形,在该矩形内的控件即被选中。
答案:【6】Shift
(5)面向对象系统的三要素分别是属性、方法和 【7】 。
解析:本题测试的是对象的组成要素。面向对象系统的三要素分别是属性、方法和事件。属性、方法是对象的本身性质和行为。而事件是对象响应外部作用的能力。
答案:【7】事件
(6)在Visual Basic中,要将一个窗体隐藏到内存中,应使用的语句 【8】 。
解析:本题测试的是窗体的加载与卸载问题。与窗体加载和退出有关的语句为:Load、Unload、Show、Hide。Load是将窗体加载到内存做预处理而不显示;Show是将内存中的窗体进行显示;Hide是将正在显示的窗体隐藏到内存中;Unload是将窗体彻底从内存中卸载掉。
答案:【8】Show
(7)属性窗口主要是针对窗体体和控件设置的。在Visual Basic中,窗体和控件被称为 【9】 。
解析:本题测试的是面向对象的概念。Visual Basic是面向对象的语言,其对象包括窗体和控件,对象具有自己的属性、事件和方法。属性大都通过属性窗口来设置。
答案:【9】对象
(8)创建第一个按钮控件对象时,系统自动为其Name属性分配一个名字,该名字为 【10】 。
解析:本题测试的是在窗体上创建对象时的默认名称。在Visual Basic中,每个控件对象建立的时候,系统会自动分配一个名字,也就是给该对象的Name属性赋一个值,如第一个窗体对象Name属性值为Form1,第四个文本框对象Name属性值为Text4,第七个命令按钮对象Name属性值为Command7。
答案:【10】Command1
3.2 Visual Basic程序设计基础
3.2.1 Visual Basic简单程序设计
1、Visual Basic中几个简单语句
(1)赋值语句
Visual Basic赋值语句一般格式: [Let] 目标操作符=源操作符 。
源操作符:变量、表达式、常量及带有属性的对象。
目标操作符:变量及带有属性的对象。
“=”是赋值号。
(2)注释语句
注释语句可以提高程序的可读性。Visual Basic中的注释用“Rem”或一个撇号“’”表示。
注释语句的一般格式: Rem 注释内容 或 ’ 注释内容
(3)结束语句(End)
End语句通常用来结束一个程序的执行,其在不同的环境下有不同的用途。
End Sub 结束一个Sub过程
End Function 结束一个Function过程
End If 结束一个If语句块
End Type 结束一个记录类型的定义
End Select 结束一个情况语句
注意:当Visual Basic多个语句写在同一行中时,语句之间用冒号“:”隔开;一条语句在一行中写不下时,用空格+续行符“_”符号换行。
2、Visual Basic应用程序开发步骤
在用Visual Basic开发应用程序时,其步骤如下:
(1)建立可视化用户界面;
(2)设置可视界面特性;
(3)编写事件驱动代码。
3、Visual Basic程序运行方式
运行程序的目的有两个,其一是输出结果;其二是发现错误。
在Visual Basic集成开发环境下,程序的运行可以用解释方式执行,也可以生成可执行文件(EXE)执行。
3.2.2 Visual Basic程序设计基础
1、Visual Basic数据类型
(1)Visual Basic提供的数据类型如下所示:
(2)用户自定义数据类型
用户可以利用Type语句定义自己的数据类型。
【格式】 [Private|Public] Type 数据类型名
数据类型元素名1 AS 类型名
数据类型元素名2 AS 类型名
……
End Type
注意:
■ 元素的类型名可以是任何数据类型,包括用户定义类型。
■ 记录类型中的字符串必须是定长字符串。
■ 在记录类型中不能含有数组。
■ 记录类型的定义必须放在模块的声明部分,先定义再使用。在标准模块中定义,其变量可以出现在工程的任何地方,且关键字Type前可以有Public或Private。如果在窗体模块中定义,则必须加关键字Private。
(3)枚举数据类型
“枚举”就是把变量的值一一列举出来,变量的值只限于列举出来的值的范围。当一个变量的值只限定为几个可能的取值时,就可以定义为枚举类型。
【格式】 [Private|Public] Enum 数据类型名
成员名1 [=常数表达式]
成员名2 [=常数表达式]
……
End Enum
注意:
■ 成员名用于指定该枚举类型的组成元素名称。
■ 元素的值可以为长整型,可以是别的枚举类型。
■ 如果没有指定常数表达式,则第一个成员值是0,其后的成员比其直接前驱的值大l。在指定常数表达式后,该成员的值发生改变,而其后的成员值也会随之改变。
2、常量和变量
(1)常量
在程序的运行过程中,其值不能被改变的数据称为常量。常量可分为直接常量、符号常量和系统常量。
■ 直接常量:使用数值并通过其值直接反映其数据类型。
■ 符号常量:
用户声明符号常量的语法如下:
【格式】 [Private|Public] Const 常量名=表达式[,常量名=表达式]……
■系统常量:Visual Basic提供了应用程序和控件定义的常量,这些常量位于对象库中。
(2)变量
在程序运行过程中,其值可以被改变的数据称为变量。变量由变量名和变量值两部分组成,使用前先要被声明。关于变量,需要注意以下几个问题:
■ 问题1:变量命名规则:
其一,名字必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度不能超过255个字符。
其二,不能使用Visual Basic的关键字作为变量名。
其三,不区分字母的大小写。
■ 问题2:变量申明:
在使用变量前,一般需要先声明变量名和其类型。变量的声明分为:显式声明和隐式声明。
显式声明:指在程序的一开始就用专门语句对变量进行声明。用Dim语句显式声明变量的语句格式如下:
Dim 变量名 [AS 类型][,变量名 [AS 类型]……]
隐式声明:在Visual Basic中,可以对使用的变量不声明而直接使用。这些变量都被系统定义为变体类型(variant)。
■ 问题3:变量作用范围:
变量的作用范围也可以称为变量的有效范围,是指应用程序中可以使用(赋值、引用、修改)这一变量的范围,即变量能发挥作用的有效区域。一般可以将变量分为局部变量、模块变量和全局变量。
局部变量(过程级变量):是指在过程(函数或子程序)内部用Dim语句声明的变量,它只能在该过程内使用,而其他的过程不能访问这个变量。这个变量的变化不会影响其他过程中的同名变量。
模块变量(窗体级变量):是指在一个窗体或模块的顶部声明段声明的变量,该变量可以在该窗体或模块的所有过程中使用,但不能被其他的窗体或模块使用。一般可以用Dim或Private来声明。
全局变量:是指所有模块均可以使用的公共变量,该变量可用于应用程序的所有过程,一般在一个窗体(或模块)顶部的声明段中用关键字Public声明。
■ 问题4:变量存活期:
全局变量(Public):其存活期为整个应用程序的运行期间。
局部变量(Dim或Private): 存活期为声明它的窗体、模块、函数或子程序的运行期间。
静态变量(Static):过程内部如果用Static声明一个变量,则该变量的存活期可以扩展到该过程所在窗体或模块的运行期间,在整个代码运行期间都能保留该变量的值。
3、常用内部函数
Visual Basic提供了大量的内部函数供编程者使用。内部函数大体上分为数学函数、随机函数、转换函数、时间日期函数和字符处理函数。
(1)数学函数
作用:用于表达式中,参与各种数学计算。
常用数学函数有:
■ 三角函数(Sin、Cos、Tan、Atn):Sin(x)、Cos(x)、Tan(x)、Atn(x)分别返回自变量x的正弦值、余弦、正切值和反正切值。
■ 平方根函数(Sqr):Sqr(x)返回自变量x的平方根。
■ 绝对值函数(Abs):Abs(x)返回自变量x的绝对值。
■ 符号函数(Sgn):Sgn(x)返回自变量x的符号。
■ 指数函数(Exp):Exp(x)返回以e为底,以自变量x为指数的值,即求:ex。
■ 对数函数(Log):Log(x)返回自变量x的自然对数(以e为底)。
(2)随机函数
作用:随机函数Rnd(x),它产生一个大于等于0,小于1的随机数。
注意:当一个应用程序反复重复使用随机数时,同一个序列的随机数会反复出现,所以称数Rnd(x)产生的随机数为伪随机数。为此,可以使用Randomize(x)语句来消除这种情况。
使用格式如下: Randomize(x)
这里,x是一个正整数,是随机发生器的“种子数”,可以忽略。
(3)转换函数
作用:转换函数用于数据类型和数据形式的转换。如整数、浮点数、字符串型数据之间的转换。
常用转换函数有:
■ 取整函数:Int(x)和Fix(x)。
■ 数制转换函数:Hex$(x)和Oct(x)。
■ 类型转换函数:Asc(x$)、Chr$(x)、Val(x)、Str$(x)、Cint(x)、Ccur(x)、CDbl(x)、CLng(x)、CSng(x)、Cvar(x)。
■ 格式输出函数:Format$()
(4)日期时间函数
作用:用于处理系统内与时间日期有关的操作。
常用的日期时间函数有:
■ Day(Now):返回当前日期。
■ Weekday(Now):返回当前是星期几。
■ Month(Now):返回当前的月份。
■ Year(Now):返回当前的年份。
■ Hour(Now):返回小时(0~23)。
■ Minute(Now):返回分钟(0~59)。
■ Second(Now):返回秒(0~59)。
(5)字符处理函数
作用:用于处理与字符操作有关的内容。
常用的字符处理函数:
■ 删除空格字符函数:
LTrim$(字符串):去掉字符串左边的空白字符;
RTrim$(字符串):去掉字符串右边的空白字符;
Trim$(字符串):去掉字符串两边的空白字符;
■ 字符串截取函数
左部截取函数Left$(字符串,n):返回字符串的左边的n个字符。
右部截取函数Right$(字符串,n):返回字符串的右边的n个字符。
中部截取函数Mid$(字符串,p,n):从第p个字符开始,向右截取n个字符。
■ 字符串长度测试函数
【格式】 Len(字符串) 或 Len(变量名)
■ String$函数
【格式】 String$(n,ASCII) 或 String$(n,字符串)
【作用】 返回由n个指定字符组成的字符串。
■ 空格函数Space$(n)
【作用】 插入n个字符的空格。
■ 字符串匹配函数
【格式】 Instr([首字符串位置,字符串1,字符串2[,n]])
【作用】 通过该函数来判定在文本框中是否输入了某个字符串。
■ 字母大小写转换函数
【格式】 Ucase$(字符串) 【格式】 Lcase$(字符串)
【作用】 小写字母转化为大写字母。 【作用】 大写字母转化为小写字母。
■ 插入字符串函数
【格式】 Mid$(字符串,位置[,L])=子字符串
【作用】 从“字符串”的“位置”开始的字符用“子字符串”代替。
4、运算符和表达式
(1)算术运算符及其表达式
Visual Basic的算术运算符参见表3-4所示。
表3-4 Visual Basic的算术运算符
运 算 | 运 算 符 | 表达式举例 |
幂 | ^ | A^3 |
取负 | - | -A |
乘法 | * | A*B*C |
浮点除法 | / | |
整数除法 | \ | A\\B |
求余数 | Mod | A Mod B |
加法 | + | A+B+C |
减法 | - | A-B-C |
字符串连接 | & | String1 & String2 |
■ 算术表达式的格式:
【格式】<数值1><算术运算符1><数值2><算术运算符2><数值3>
■ 算术运算符的优先级:
算术运算符的优先级依次递减为:幂、取负、乘法、浮点除法、整数除法、求余数、加法、减法、字符串连接。
■ 字符串连接:
“&”是专门用于字符串连接操作的符号,算术运算符“+”也可以用于字符串操作。一般情况下,使用“&”符号比“+”符号进行字符串操作更安全。
(2)关系运算符、逻辑运算符及其表达式
Visual Basic的关系运算符和逻辑运算符参见表3-5、表3-6
关系运算符也叫比较运算符,是用来对两个表达式的值进行比较的,比较的结果是一个逻辑值,即真(True)或假(False)。
逻辑运算也称布尔运算。用逻辑运算符连接两个或多个关系式,组成一个布尔表达式。
表3-5 Visual Basic的关系运算符
运 算 | 关系运算符 | 举例 | |
关系表达式 | 结果 | ||
相等 | = | 2+10=11 | False |
大于 | > | 12>10 | True |
大于等于 | >= | 50>=30 | True |
小于 | < | 50<30 | False |
小于等于 | <= | 50<=30 | False |
不等于 | <>或>< | 100<>100.0 | True |
比较样式 | Like | ||
比较对象变量 | Is |
运 算 | 逻辑运算符 |
与 | And |
或 | Or |
非 | Not |
异或 | Xor |
等价 | Eqv |
蕴含 | Imp |
表达式内含有多个运算符,计算机按一定的顺序对表达式求值,一般顺序参见表3-6。
表3-6 运算符号执行的顺序
算术运算符 | 比较运算符 | 逻辑运算符 | 优先级 |
幂(^) 负数(-) 乘和浮点除(*,/) 整数除(\) 求余数(Mod) 加、减法(+,-) 字符串连接(&) | 相等(=) 不等于() 小于() 大于() 小于或等于 大于或等于 Like Is | Not And Or Xor Eqr Imp | 高 低 |
高 | 低 |
3.2.3 例题解析
1、选择题:
(1)为了装入一个Visual Basic应用程序,下列说法正确的是
A)只装入窗体文件(.frm) B)分别装入工程文件和标准模块文件(.bas)
C)只装入工程文件(.vbp) D)分别装入工程文件、窗体文件和标准模块文件
解析:本题测试的是在工程文件的装入方法。Visual Basic应用程序包括四类文件,即窗体文件、标准模块文件、类模块文件和工程文件。四类文件都有自己的文件名,但只要装入工程文件,就可以自动把与该文件有关的其它3类文件装入内存。不需要分别装入。
答案:C
(2)为了保存一个Visual Basic应用程序,下列说法正确的是
A)只保存窗体文件(.frm) B)分别保存工程文件和标准模块文件(.bas)
C)只保存工程文件(.vbp) D)分别保存工程文件、窗体文件和标准模块文件
解析:本题测试的是在工程文件的保存方法。Visual Basic应用程序包括四类文件,即窗体文件、标准模块文件、类模块文件和工程文件。四类文件都有自己的文件名,在保存工程文件时,必须分别保存上述3类文件。
答案:D
(3)在代码编辑器中,如果一条语句太长,无法在一行内写下(不包括注释),要拆行书写,可以在行末使用续行字符,表示下—行是当前行的继续。续行字符是
A)—个空格加—个下划字符(_) B)—个下划字符(_)
C)直接回车 D)—个空格加一个连字符(-)
解析:在Visual Basic中使用的续行符是“_”(即一个空格加一个下划字符)。如果一个语句行的末尾是下划线,则下一行与该行属于同一个语句行。注意,续行符与它前面的字符之间至少要有一个空格。
答案:A
(4)下列可以作为Visual Basic的变量名的是
A)4*Delta B)Alpha
C)4ABC D)ABπ
解析:本题测试的是Visual Basic变量名的命名规则。变量名遵循的规则有四条:一是,名字只能由字母、数字和下划线组成;二是,名字的第一个字符必须是英文字符,最后一个字符可以是类型说明符;三是,名字的有效字符数为255个;四是,不能用Visual Basic的保留字做变量名。A)和C)违反了第二条规则;D)违反了第一条规则,π为不合法字符。
答案:B
(5)设a=2,b=3,c=4,d=5,下列表达式的值是
a>b And c<=d Or 2*a>c
A)True B)False
C)-1 D)1
解析:本题测试的是Visual Basic表达式的执行顺序和执行结果。Visual Basic表达式的执行顺序是算术运行优于关系运算,关系运算优于比较运算。算术运算结果为数组,关系运算和比较运算的结果为逻辑量。所以,2*a的结果为“4”,然后,a>b结果为“False”,c<=d结果是“True”,2*a>c结果为“False”。则上式转换成逻辑运算式为:False And True Or False。根据逻辑运算规则,先做And运算结果为False,再做Or运算,结果为False,所以最后结果为False。
答案:B
(6)假设有如下的记录类型:
Type Student
Number As String
Name AS String
Age As Integer
End Type
则正确引用该记录类型变量的代码是
A)Student.Name="" B)Dim s as Student
s.Name="张红" s.Name="张红"
C)Dim s as Type Student D)Dim s as Type
s.Name="张红" s.Name="张红"
解析:本题测试的是记录类型变量的引用方法。记录类型变量的定义与基本数据类型变量的定义没有什么区别,但在引用时有所不同。正确的引用方法是:用Type…EndType定义了一个用户定义的数据类型Student,再用Integer定义Student类型的变量s,然后就可以用“变量.元素”的格式引用记录中的各个成员。例如:s.Number、s.Name、s.Age。
答案:B
(7)只能在标准模块中声明,不能在过程或窗体模块中声明的变量是
A)私有变量 B) 全局变量 C)局部变量 D)窗体变量
解析:本题测试的是变量的类型及其作用域。标准模块也称全局模块或总模块,可以由全局变量声明、模块级声明和通用过程、函数等几部分组成。其中全局声明放在标准模块的首部,过程和函数则可以随便排列。显然,为了使变量可以在整个运用程序内均起作用,必须将其定义在标准模块中,而不能放在过程和窗体模块中。
答案:B
(8)下列叙述中正确的是
A)在窗体的Form_Load事件过程中定义的变量是全局变量
B)局部变量的作用域可以超出所定义的过程。
C)在某个Sub过程中定义的局部变量可以与其他事件过程中定义的局部变量同名,但其作用域只限于该过程
D)在调用过程时,所有局部变量被系统初始化为0或空字符串
解析:本题测试的是变量作用域问题。选项A:Form_Load事件过程和Sub过程是一样的,其变量的作用域仅限于该过程。选项B:局部变量的作用域只限于它所在的过程中;选项D:如果使用“Static”定义的过程,则过程中的局部变量就是“Static”型的,即在每次调用过程时,局部变量的初值保持上一次调用过程中的结果,而不一定是0或空字符串。
答案:C
(9)在窗体上画一个名称为Command1的命令按钮和3个名称分别为Label1、Label2、Label3的标签,然后编写如下代码:
Private x As Integer
Private Sub Command1_Click()
Static y As Integer
Dim z As Integer
n = 10 : z = n+z
y = y + z : x = x+z
Label1.Caption=x
Label2.Caption=y
Label3.Caption=z
End Sub
运行程序,连续运行程序,连续三次单击命令按钮后,则3个标签中显示的内容分别是
A)10 10 10 B)30 30 30
C)30 30 10 D)10 30 30
解析:本题测试的是变量作用域问题。变量x是在Sub过程外部声明的变量,是模块级变量,模块加载之后,它就己存在,而且在模块的所有过程中都可见,只要不退出该模块,则该值一直存在。模块的代码开始运行后,使用Static语句声明的变量 y 一直保持其值,直至该模块重新启动。z是用Dim定义的过程局部变量,每次运行该过程其都以初始值为基础,进行变化。所以连续3次单击命令按钮后,变量x、y、z的值分别为:30、30、10。
答案:C
(10)有如下事件过程:
Private Sub Form_Click( )
A$="123" : B$="456"
X = Val(A$) + Val(B$)
Print x\\100
End Sub
程序运行后,单击窗体,则窗体上显示的内容是
A)123 B)3 C)5 D)579
解析:本题测试的是转换函数Val()的作用和整数除“\”的意义。类型转换函数Val()是将字符串A$和B$转换成数值“123”和“456”。所以变量x的计算值为123+456=579,而“\”表示两个整数相除,且结果取整,所以,579\100=5。
答案:C
(11)在窗体上画一个命令按钮,名称为Command1。然后编写如下程序:
Private Sub Command1_Click( )
For I=1 To 4
For J=0 To I
Print Chr$(65+I);
Next J
Next I
End Sub
程序运行后,单击命令按钮,则在窗体上显示的内容是
A) BB B) A C) B D) AA
CCC BB CC BBB
DDDD CCC DDD CCCC
EEEEE DDDD EEEE DDODD
解析:本题测试的是转换函数Chr$( )的用法。函数Chr$(x)的功能是:把x的值转换为相应的ASCII字符,“65”值的ASCII字符为“A”, “66”值的ASCII字符为“B”,……“90”值的ASCII字符为“Z”。循环变量I是控制输出字符,循环变量J是控制输出字符个数。注意:J的初值为0。
答案:A
(12)执行以下程序段后,变量c$的值为
a$="Visual Basic Programing"
b$="Quick"
c$ =b$ & UCase(Mid$(a$,7,6)) & Right$(a$,11)
A)Visual BASIC Programing B)Quick Basic Programing
C)QUICK Basic Programing D)Quick BASIC Programing
解析:本题测试的是字符串截取函数Mid$( )和Right$( )以及大小写转换函数Ucase( )的用法。函数Mid$字符串,p,n)的功能是:从位置p开始取字符串的n个字符;函数Right$(字符串,n)的功能是:返回“字符串”的最后n个字符;函数Ucase$(字符串)的功能是:把“字符串”中的小写字母转换为大写字母。
答案:D
(13)选拔身高T超过1.7米且体重W小于62.5公斤的人,表示该条件的布尔表达式为
A)T>=1.7 And W<=62.5 B)T<=1.7 Or W>=62.5
C)T>1.7 And W<62.5 D)T>=1.7 Or W<62.5
解析:本题测试的是关系表达式和逻辑表达式的正确表示方法。根据题意,应该使用“And”逻辑运算符建立其判断条件。类似的,如果在题目的叙述过程中,用到“而且”、“且”、“同时”、“还”等字样的,都应该采用“And”。“超过”表示大于,用符号“>”,“小于”用符号“<”。
答案:C
(14)假设有如下声明:Dim x As Integer , 如果sgn(x)的值为-1,则x的值是
A)整数 B)大于0的整数
C)等于0的整数 D)小于0的数
解析:本题测试的是符号函数sgn(x)返回值的意义。Sgn(x)返回自变量x的符号,即:当x为负数时,函数返回-1;当x为0时函数返回0;当x为正数时,函数返回1。
答案:D
2、填空题:
(1)有四种类型的文件:.bas、.res 、.frm 和.Ocx 。其中 【1】 文件类型不能在“工程资源管理器”窗口中列出。
解析:本题测试的是在工程资源管理器中文件的列表情况。
分析;与该工程vbp或工程组vbg有关的所有标准模块文件(.bas)、资源文件(.res)、类模块文件(.cls)和窗体文件(.frm)等都在“工程资源管理器”窗口中显示出来。OLE控件或定制控件的扩展名为Ocx。
答案:【1】.ocx
(2)与下列数学表达式对应的Visual Basic表达式是 【2】 。
解析:本题测试的是Visual Basic算术表达式的书写格式。Visual Basic算术表达式的部分运算符表示的形式与实际数学表达式是有区别的,主要考虑的是通过键盘输入符号的快捷与方便。如“×”符号表示为“*”符号,“÷”符号表示为“/”,乘方的符号表示为“^”等等。
答案:【2】
(3)执行以下语句后,输出的结果是 【3】 。
s$="ABCDEFGHIJK" < CR >
Print Left$(s$,4) < CR >
Print Right$(s$,4) < CR >
解析:本题测试的是字符串截取函数使用方法。Left$(s$,4)是从s$的左边第一个字符开始,顺序截取4个字符,结果为“ABCD”;Right$(s$,4)从s$的右边倒数第4个字符开始,顺序截取后面的字符,结果为“HIJK”。< CR >代表写程序时换行;Print表示在立即窗口或在窗体上将结果打印出来。
答案:【3】ABCD
HIJK
(4)以下程序的功能是:生成20个100到300之间的随机整数,输出其中能被5整除的数并求出它们的和。请填空。
Private Sub Command1_Click( )
For i=1 To 20
x=Int( 【4】 *200+100)
If 【5】 = 0 Then
Print x
s =s + 【6】
End If
Next i
Print "Sum=";s
End Sub
解析:本题测试的是随机函数的使用方法。Rnd函数产生随机数的范围为(0,1)。为了生成某个范围内的随机整数,可使用以下公式:Int((上限值—下限值+1)*Rnd+下限值)。判断数值是否能被另一个数值整除,用运算符Mod求余数的方法比较方便。
答案:【4】Rnd 或 Rnd(n),其中n为任意整数
【5】X Mod 5
【6】X
(5)在窗体上面画一个名称为Command1的命令按钮,编写如下事件过程:
Private Sub Command1_Click( )
Dim a As String
a = 【7】
For i=1 To 5
Print Space(6-i); Mid$(a,6-i,2*i-1)
Next i
End Sub
程序运行后,单击命令按钮,要求窗体上显示的输出结果为:
5
456
34567
2345678
1234567
请填空。
解析:本题测试的是空格函数Space( )和字符串截取函数Mid$( )的用法。空格函数Space$(n)的功能是返回n个空格,函数Mid$(字符串,p,n)的功能是从位置p开始取字符串的n个字符。该程序是字符输出控制程序。
答案:【7】“1234567”
(6)在立即窗口中执行以下语句:Print Day(# 8/31/2006#),则输出结果是 【8】 。
解析:本题测试的是日期函数Day( )的功能。Day(Now)返回当前的日期,“#8/31/2006#”为日期常量,表示2006年8月31日,所以结果返回31。
答案:【8】31
(7)表达式Fix(-32.68)十Int(-23.02)的值为 【9】 。
解析:本题测试的是取整函数Int(x)和Fix(x)的功能。Fix(x)功能是去掉一个浮点数的小数部分,保留其整数部分;Int(x)的功能求不大于自变量x的最大整数。所以,Fix(-32.68)=-32,Int(-23.02)=-24,则Fix(-32.68)十Int(-23.02)=-56。
答案:【9】56
3.3 Visual Basic数据输入和输出
一般而言,Visual Basic程序可以包含三个部分:输入、处理和输出。计算机通过输入操作实现数据的接受,通过输出将处理完的数据提供给用户。Visual Basic提供了多种输出输入手段。
3.3.1 数据输出(Print方法)和数据输入(InputBox函数)
1、数据输出(Print方法)
(1)Print方法
Print方法的功能是在窗体上显示文本字符串和表达式的值,并在其他图形对象或打印机上输出结果。其使用格式如下:
[对象名称.]Print[表达式][,|;]
注意:
■ 对象名:可以是窗体、图片框、打印机和立即窗口,缺省为在当前窗体上显示。
■ 表达式:可以包含一个或多个表达式,各表达式要用逗号、空格或分号相隔。表达式类型为数值型或字符串,缺省时,则输出一个空行。
■ Print方法执行一次,默认会自动换行;但相邻的两个Print输出的内容想要在同一行输出,则在前面的Print的末尾加上逗号或分号。
(2)与Print方法有关的函数
■ Tab函数
【格式】Tab(n)
【功能】用于把光标往后移动n个字符的位置,与输出的内容用分号隔开。
注意:如果n大于行宽,显示位置为“n Mod 行宽”;如果n小于0,从第一列输出;如果当前光标的位置超过了n,光标则下移一行。
■ Spc函数
【格式】Spc(n)
【功能】在Print输出中,用该函数可以跳过n个空格。
注意:与Tab函数不同的是,Tab函数从第一列开始计数,n是绝对偏移量;spc函数从前面的输出项后面开始计数,n是相对偏移量。
■ Space 函数
【格式】Space$(n)
【功能】Space$函数返回n个空格。
(3)格式输出函数Format$
【格式】Format$(数值表达式,格式字符串)
【功能】可以使数值或日期按指定的格式输出。
注意:如果省略格式字符串,则把数值表达式的值转换成字符串。
格式字符串及其作用如表3-7所示。
表3-7 格式字符串及其作用
字 符 | 作 用 |
# | 数字:不在前面或后面补0 |
0 | 数字:在前面或后面补0 |
. | 小数点 |
, | 千位分隔符 |
﹪ | 百分比符号 |
$ | 美元符号 |
-、+ | 负、正号 |
E-、E+ | 指数符号 |
■ Cls方法
【格式】[对象.]Cls
【功能】Cls方法用于清除由Print方法显示的文本或在图片框中显示的图形,并把光标移到对象的左上角((0,0))。
注意:若省略对象名则清除在当前窗体内显示的内容。
■ Move方法
【格式】[对象.]Cls(左边距离,[上边距离],[宽度],[高度])
【功能】用于移动窗体和控件,并可改变其大小。
■ TextHeight和TextWidth方法
【格式】[对象.]TextHeight(字符串)
[对象.]TextWidth(字符串)
【功能】用于辅助设计坐标,分别返回一个文本字符串的高度值和宽度值。
2、数据输入(InputBox函数)
【格式】InputBox(prompt[,title][,default][,xpos,ypos][,helpfile,context])
【功能】InputBox函数可以产生一个对话框,作为输入数据的界面,供用户输入数据,并返回所输入的内容。函数中各参数的作用如图3-3所示。
图3-3 InputBox函数对话框
注意:
■ Prompt:一个字符串,对话框内的显示信息,用来提示用户输入。
■ Title:一个字符串,对话框标题。
■ Default:一个字符串,用来显示输入缓冲区的默认。
■ xpos,ypos:确定对话框位置,分别表示对话框到屏幕左边界和右边界的距离。
■ helpfile:字符串表达式,用于指明帮助文件的名字。
■ context:数值表达式,表示相关的帮助主题或目录号。
3.3.2 MsgBox函数和MsgBox语句
1、MsgBox函数
【格式】MsgBox(prompt[,buttons][,title][,helpfile,context])
【功能】在对话框中显示消息,等待用户单击按钮,并返回一个Integer告诉用户单击哪一个按钮。函数中各参数的作用如图3-4所示。
图3-4 MsgBox函数对话框
注意:
■ Prompt:必需的。字符串表达式,作为显示在对话框中的消息。如果prompt的内容超过一行,则可以在每一行之间用回车符(Chr(13))、换行符(Chr(10))或是回车与换行符的组合 (Chr(13) & Chr(10))将各行分隔开来。
■ Buttons:可选的。数值表达式是值的总和,指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。如果省略,则buttons的缺省值为 0。
关于buttons 参数参见表3-8的设置值。
■ TiTle:可选的。在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。
■ helpfile和context:可选的。与帮助有关的参数。
MsgBox函数的返回值是一个整数。返回的整数见表3-9所示。
2、MsgBox语句
【格式】MsgBox Msg$[,type%][,title$][,helpfile,context]
【功能】是MsgBox函数的语句形式。各参数的含义及作用与MsgBox函数相同。
表3-8 buttons 参数设置值:(共四类)
类别 | 常 数 | 值 | 描 述 |
Ⅰ类: 对话框内命令按钮的类型和数量。 | vbOKOnly | 0 | 只显示 OK 按钮。 |
VbOKCancel | 1 | 显示 OK 及 Cancel 按钮。 | |
VbAbortRetryIgnore | 2 | 显示 Abort、Retry 及 Ignore 按钮。 | |
VbYesNoCancel | 3 | 显示 Yes、No 及 Cancel 按钮。 | |
VbYesNo | 4 | 显示 Yes 及 No 按钮。 | |
VbRetryCancel | 5 | 显示 Retry 及 Cancel 按钮。 | |
Ⅱ类: 指定对话框所显示的图标。 | VbCritical | 16 | 显示 Critical Message 图标。 |
VbQuestion | 32 | 显示 Warning Query 图标。 | |
VbExclamation | 48 | 显示 Warning Message 图标。 | |
VbInformation | 显示 Information Message 图标。 | ||
Ⅲ类: 指定默认活动按钮。 | vbDefaultButton1 | 0 | 第一个按钮是缺省值。 |
vbDefaultButton2 | 256 | 第二个按钮是缺省值。 | |
vbDefaultButton3 | 512 | 第三个按钮是缺省值。 | |
vbDefaultButton4 | 768 | 第四个按钮是缺省值。 | |
Ⅳ类: 分别用于应用程序和系统强制返回。 | vbApplicationModal | 0 | 应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。 |
vbSystemModal | 4096 | 系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。 | |
vbMsgBoxHelpButton | 16384 | 将Help按钮添加到消息框 | |
VbMsgBoxSetForeground | 65536 | 指定消息框窗口作为前景窗口 | |
vbMsgBoxRight | 524288 | 文本为右对齐 | |
vbMsgBoxRtlReading | 1048576 | 指定文本应为在希伯来和阿拉伯语系统中的从右到左显示 |
常 数 | 值 | 描 述 | 操 作 |
vbOK | 1 | OK | 选“确定”按钮 |
vbCancel | 2 | Cancel | 选“取消”按钮 |
vbAbort | 3 | Abort | 选“中止”按钮 |
vbRetry | 4 | Retry | 选“重试”按钮 |
vbIgnore | 5 | Ignore | 选“忽略”按钮 |
vbYes | 6 | Yes | 选“是”按钮 |
vbNo | 7 | No | 选“否”按钮 |
1、输出内容的字形问题
Visual Basic可以输出各种不同的字体、字号、粗细和其他显示效果。
(1)字体类型:
通过FontName属性设置。
【格式】[窗体.][控件.]|Printer.FontName[="字体类型名"]
(2)字体大小:
通过FontSize属性设置。
【格式】[窗体.][控件.]|Printer.FontSize [=点数]
(3)粗体字:
通过FontBold属性设置。
【格式】FontBold[=True/False]
(4)斜体字:
通过FontItalic属性设置。
【格式】FontItalic[=True/False]
(5)加下划线:
通过FontUnderline属性设置
【格式】 FontUnderline[=True/False]
(6)加删除线:
通过FontStrikethru属性设置
【格式】FontStrikethru[=True/False]
2、打印机输出
(1)直接输出
【格式】Printer.Print[表达式表]
【功能】是指把信息直接送到打印机输出,仍然使用Print方法,但其对象为Printer。
注意:通过打印机输出,有一些特别的方法和属性:
■ Page属性——用于设置页号。
■ NewPage方法——用于进行换页操作,强制换页。
■ EnoPage方法——用于结束文件的打印。
(2)窗体输出
【格式】[窗体.]PrintForm
【功能】是指通过窗体来打印信息,先把输出信息显示在窗体上,再把窗体上的信息打印出来,包括文本信息和任何其他窗体上的可见信息。
注意:如果要进行窗体输出,先要将把输出窗体的AutoRedraw属性设置为True,以便保存窗体上的信息。
3.3.4 例题解析
1、选择题:
(1)假定Picture1和Text1分别为图片框和文本框的名称,下列不正确的语句是
A)Print 25 B)Picture1.Print 25
C)Text1.Print 25 D)Debug.Print 25
解析:本题测试的是数据输出Print方法的使用形式。Print方法使用的格式为:[对象名称.]Print[表达式][,|;],其中,对象名可以是窗体(Form)、图片框(Picture)、打印机(Printer)和立即窗口(Debug),缺省为在当前窗体上显示。
答案:C
(2)以下语句的输出结果是(在立即窗口中)
a="Beijing" b="Nanjing" Print a;b A)Beijing△Nanjing B)△Beijing△Nanjing C)BeijingNanjing D)△Beijing△Nanjing△ 其中:△表示空格。 解析:本题测试的是Print方法的输出格式。Print方法输出多个表达式或字符串时,各表达式用逗号分隔时,则按标准输出格式(分区输出格式:以14个字符为一个分区单位)显示数据;如果用分号或空格做分隔符,则按紧凑格式输出数据。 答案:C (3)执行以下语句: a=InputBox("Today","Tomorrow","Yesterday",,,"Day before Yesterday",5) A)Today B)Tomorrow C)Yesterday D)Day before Yesterday 解析:本题测试的是InputBox函数的输出格式。InputBox函数的输出格式为: InputBox(prompt[,title][,default][,xpos,ypos][,helpfile,context]) 在对话框的输入区中显示的应当是第三个参数:输入区的默认值(default),即字符串“Yesterday”。 答案:C (4)下列语句输出的结果为 Print Format$(351.75,"0######.#") Print Format$(9.2,"0######.#") Print Format$(251.91,"0######.#") A)0000351.8 B)0###351.75 C)351.75 D)351.7 0000009.2 0#####9.2 9.2 9.2 00251.9 0251.91 251.91 251.9 解析:本题测试的是格式输出函数Format$及其控制字符的使用方法。Format$函数中的“格式字符串”内包含有符号“#”和“0”时,按“0”数字占位符的格式输出,即显示的多余的位以0补齐。 答案:A (5)在窗体上添加一个名称为Command1的命令按钮,然后编写如下事件过程 Private Sub Command1_Click() x = InputBox("input") Select Case x Case 1, 3 Print "分支1" Case Is > 4 Print "分支2" Case Else Print "else 分支" End Select End Sub 程序运行后,如果在输入对话框中输入2,则窗体上显示是 A)分支1 B)分支2 C)Else 分支 D)程序出错 解析:本题测试的是InputBox函数返回值的类型问题。X默认为变体型变量,可以根据需要参与任何一种类型数据的赋值与表达式的运算。根据题意,InputBox函数返回字符串“2”,赋值x后,转换为变体型变量。根据多项选择的要求,以Integer类型数据参与判断和选择。“2”属于Case Else情况。 答案:C (6)在窗件上画一个名称为Command1的命令按钮,然后编写如下事件过程: Private Sub Command_Click() Move 500,500 End Sub 程序运行后,单击命令按钮,执行的操作为 A)命令按钮移动到距窗体左边界、上边界各500的位置 B)窗体移动到距屏幕左边界、上边界各500的位置 C)命令按钮向左、上方向各移动500 D)窗体向左、上方向各移动500 解析:本题测试的是Move方法的用途及默认对象。Move方法的使用格式是: [对象.]Cls(左边距离,[上边距离],[宽度],[高度]) 其功能是用于移动窗体和控件,并可改变其大小。若无对象,则默认为窗体对象。如果是窗体对象,则“左边距离”和“上边距离”均以屏幕左边界和上边界为准。 答案:B (7)执行下面的语句后,所产生的信息框的标题是 a=MsgBox("你是学生吗?","提问","",5) A)提问 B)空 C)你是学生吗? D)出错,不产生信息框 解析:本题测试的是MsgBox函数的语句形式和内容。MsgBox函数的语句形式是: MsgBox(prompt[,buttons][,title][,helpfile,context]) 在[ ]中内容可以省略而取默认值,但位置必须表明,即参数分隔符“,”不能省。信息框的标题是MsgBox函数的第三个参数。 答案:A (8)想实现当用户选择关闭某应用程序时提示用户是否保存文件,或取消选择(默认保存),正确的语句是 A)MsgBox("是否在退出前,保存已经打开的文件?",vbYesNo) B)MsgBox("是否在退出前,保存已经打开的文件?",VbYesNoCancel+vbDefaultButton1) C)MsgBox("是否在退出前,保存已经打开的文件?",vbYesNoCancel+vbDefaultButton2) D)MsgBox("是否在退出前,保存已经打开的文件?",vbOkOnly) 解析:本题测试的是MsgBox函数的第二个参数的表达形式。根据题意:“是否保存文件,或取消选择”用“VbYesNoCancel”常数实现,显示“是”、“否”及“取消”3个按钮;“默认保存”用“vbDefaultButton1”来实现,因为“保存”是第一个按钮。“vbDefaultButton2”默认的是第二个按钮。 答案:B (9)在MsgBox函数中,如果省略第三个Title参数,则对话框的标题为 A)一个随机的字符串 B)一个空字符串 C)工程的名字 D)与第一个参数相同 解析:本题测试的是MsgBox函数的第三个参数的缺省值问题。MsgBox函数的语句形式为: MsgBox(prompt[,buttons][,title][,helpfile,context]) Title是MsgBox的一个可选参数,它是在对话框标题栏中显示的字符串表达式。如果省略<Title>,Visual Basic将应用程序名字放在标题栏中。 答案:C (10)在用FontSize、FontBold、FontItalic、FontUnderline、FontStrikethru属性来设置文本的大小和样式属性之前,需要先改变的属性是 A)Enabled B)FontName C)Checked D)Visible 解析:本题测试的是与文本字形有关的属性。一般而言,FontSize、FontBold、FontItalic、FontUnderline、FontStrikethru等属性的设置与集体的字体有关,即首先要选择字体,然后再设置字体的这些属性。而选择字体,实际上就是为字形的FontName属性赋值。 答案:B (11)为了能够把信息直接送往打印机,应该把Print方法的对象改为 A)Picture B)Form C)Image D) Printer 解析:本题测试的是具有Print方法的对象的直接输出的问题。直接输出就是把信息直接送往打印机,所使用的仍是Print方法,只是把Print方法的对象改为Printer,其格式为: Printer.Print [表达式表] Print属性返回一个Printer对象,该对象允许一个系统打印机进行通信。Picture、Image是与图形、图像有关的对象,而Form是窗体对象,三者的Print方法均是在对象内部打印输出结果。 答案:D (12)在Visual Basic中,用来设置窗体进行打印输出的语句是 A)Form1.Show B)Form1.Print C)Form1.Print1n D)Form1.PrintForm 解析:本题测试的是窗体的PrintForm方法。Form1.Show是显示窗体;Form1.Print是将信息打印在窗体上;Print1n方法的对象是立即窗口(Debug);而Form1.PrintForm则是先把输出的信息送到窗体上然后再用PrintForm方法把窗体上的内容打印出来。 2、填空题: (1)在窗体上面一个命令按钮,然后编写如下事件过程: Private Sub Command1_Click() a=InputBox("请输入一个整数") b=InputBox("请输入一个整数") Print a+b End Sub 程序运行后,单击命令按钮,在输入对话框中分别输入321和456,输出结果为 【1】 。 解析:本题测试的是InputBox函数的使用方法和返回值。InputBox函数作用时可以产生一个对话框,并显示提示,等待用户输入正文或按下按钮,并返回包含文本框内容的字符串。变量a和b都是变体型变量。通过InputBox函数返回的是字符串,则a+b相当于两个字符串连接操作(“321”+“456”=“321456”)。 答案:【1】321456 (2)在Visual Basic中,语句:Print 3>9的输出结果为 【2】 。 解析:本题测试的是Print方法与输出内容的关系:“3>9”是一个关系表达式,关系表达式的结果为一个逻辑量,所以,“3>9”的结果为“False”。Print方法打印的是表达式的结果,而不是表达式本身。 答案:【2】False (3)语句:Print "50×6=";50*6的输出结果是 【3】 。 解析:本题测试的是Print方法与输出内容的关系。"50×6="是一个字符串,Print原样输出;50*6是一个算术表达式,Print输出其运算结果;“;”表示两个多项式紧凑输出。 答案:【3】50×6=300 (4)语句MsgBox("a wrong operation"!,vbOkOnly)的作用为 【4】 。 解析:本题测试的是MsgBox函数的第二个参数的表达形式和含义。MsgBox函数的语句形式为: MsgBox(prompt[,buttons][,title][,helpfile,context]) 当参数Buttons的设置值为vbOkOnly,只显示“确定”按钮。 答案:【4】显示一个对话框,输出信息,显示一个“确定”按钮。 (5)在窗体中有两个命令按钮:“显示”(控件名为CmdDisplay)和“测试”(控件名为cmdTest)。单击“测试”技钮时,执行如下事件过程。此事件过程的功能是:当在窗体中出现消息框并选中其中的“确定”按钮时,隐藏“显示”按钮。否则退出。根据题意,请完善下列程序。 Private Sub CmdTest_Cllck() Answer= 【5】 ("隐藏按钮") IF Answer=vbOK then CmdDisplay.Visible= 【6】 Else End End If End Sub 解析:本题测试的是MsgBox函数的返回值类型问题。MsgBox函数所显示的对话框有7种命令按钮,返回值与这7种按钮相对应,分别为1~7的整数,这个整数与所选择的命令按钮有关,当单击消息框的“确定”按钮时,MsgBox函数返回值为1(vbOK)。根据题意,MsgBox函数返回值为1(vbOK)时,要隐藏CmdDisplay按钮,则使其Visible属性为Flase。 答案:【5】MsgBox 【6】Flase (6)设计一个程序,界面如图3-5所示。用户界面由一个标签(Label1)、一个文本框(Text1)、三个复选框(Check1、Check2、Check3)组成。程序运行后,用户在文本框输入一段文字,然后按需要单击各复选框,以改变文字的字体、字型即大小。 要求:当不选择“宋体”时,文本应该是“黑体”;当不选择16号字时,字号时10;当不选择斜体时,文本采用默认字型。请根据题意,完善下列程序。 图3-5 设计效果图 Option Explicit Private Sub Check1_Click() If Check1.Value = 1 Then Text1.FontName = "宋体" Else Text1.FontName = "黑体" End If End Sub Private Sub Check2_Click() If Check2.Value = 1 Then Text1.FontItalic = 【7】 Else Text1.FontItalic = 【8】 End If End Sub Private Sub Check3_Click() If Check3.Value = 【9】 Then Text1.FontSize = 16 Else Text1.FontSize = 10 End If End Sub 解析:本题测试的是与文本字形有关的属性及其值。当FontItalic的属性被设置为True时,文本以斜体字输出。该属性的默认值为False。复选框的Value属性用来表示复选钮的状态。其值为1,表示“选中”;其值为0,表示“没有选中”,其值为2,表示被禁止。 答案:【7】True 【8】False 【9】1