VB第三章VisualBasic程序设计基础.ppt
第三章 Visual Basic程序设计基础,主要内容,3.1 标识符、程序的书写规则3.2 数据类型 3.3 常量 3.4 变量 3.5 运算符 3.6 数组 3.7 基本控制结构 3.8 常用内部函数 3.9 Visual Basic中的过程,3.1 标识符、程序的书写规则,一、标识符 标识符是为程序中的变量、常量、数据类型、过程、函数和类等定义的名字,利用标识符实现对上述对象的引用。VisualBasic中标识符的命名规则如下:1.标识符必须以字母开头,后面可以是字母、数字、下划线。例如:ab_c、Mybutton、b77是合法的标识符,而$hyx、3abc就是非法的标识符。2.标识符的长度不能超过255个字符。3.自定义的标识符不能和VisualBasic中已有运算符、语句、函数和过程名等关键字同名。也不能与系统的方法和属性同名。4.关键字是VisualBasic保留下来的作为程序中有固定含义的标识符,不能被重新定义。,3.1 标识符、程序的书写规则,VisualBasic中的关键字如表3.1所示。表3.1 VisualBasic中的关键字,3.1 标识符、程序的书写规则,二、程序的书写规则 VisualBasic作为一种程序设计语言有自己的程序书写规则。其主要规则如下:1.程序注释 若要为程序代码添加注释,可使用单引号“”或“Rem”作为注释内容的开头,VisualBasic将在编译时忽略注释部分内容。例如:Form1.Width=300 将窗体的宽度设置为300 Temp=Form1.Width 将窗体的宽度赋值给变量Temp Form1.Caption=”你好!”修改窗体的标题文字 Temp=Temp+20 Rem 变量Temp赋值为自己的原值加20,3.1 标识符、程序的书写规则,2将一行语句写成多行 使用续行符“_”(一个空格紧跟一条下划线)将长语句分成多行。,strTemp=“问君归期未有期,”&_“巴山夜雨涨秋池,”&_“何当共剪西窗烛,”&_“却话巴山夜雨时,”,注意:在同一行内,续行符后面不能加注释。,3将多行语句写成一行,在一行中写下多条语句,可以使用“:”作为分隔符号。例:Form1.width=300:temp=Form1.width:Form1.Caption=“你好”,3.1 标识符、程序的书写规则,4VisualBasic代码不区分字母大小写(1)VisualBasic的关键字,首字母总被转换成大写,其余字母被转换成小写。(2)如果关键字有多个英文单词组成,VisualBasic将每个单词首字母转换成大写。(3)VisualBasic中用户自定义的变量、过程名等,输入时以定义为准,自动向定义形式转换。,3.2 数据类型,VisualBasic中可以使用的数据类型有如下几种:一、数值型数据类型 1.常规整型(Interger)常规整型简称为整型,表示不带小数点和指数符号的数,其内部存储空间和范围如表3.2所示。十进制整数只能包含数字09、正负号。十进制整型数的范围为-32768+32767。例如:10,2566,-38,0。八进制数由数字07组成,并以&o引导,其后面的数据位数6位,其范围为&o0&o177777。十六进数由数字09、AF或af组成,并以&H引导,其后面的数据位数4位,其范围为&H0&HFFFF。,3.2 数据类型,2.长整型(Long)长整型数的数字组成与整数相同,正号可以省略,并且在数值中不能出现逗号。长整型数内部存储空间和范围如表3.2所示。十进制长整数的范围为-2147483648+2147483647。例如:32768,-2567898,10。十六进制长整数以&H开头,以&结尾,其范围为&H0&HFFFFFFFF&。八进制数长整数以&o或&开头,以&结尾,其范围为&o0&o37777777777&。,3.2 数据类型,3.单精度(Single)单精度数内部存储空间和范围如表3.2所示。可表示最多7位有效数字的数,小数点可以位于这些数字的任何位置,正号可以省略。单精度数可以有定点形式和浮点形式来表示。单精度数的定点形式是在该范围内含有小数的数。例如:-3.4120.0+1.234.00069-31.24683 单精度数的浮点形式是用科学计数法,即以10的整数次幂表示的数,以“E”来表示底数10。例如-3.4105,120.010-5,1.2341012,0.0007810-23分别表示为:-3.4E5120.0E-51.234E+12.00078E-23,3.2 数据类型,4.双精度数(Double)双精度数内部存储空间和范围如表3.2所示。可表示最多15位有效数字的数,小数点可以位于这些数字的任何位置,正号可以省略。双精度数也有定点和浮点两种形式。双精度数的定点形式是在该范围内含有小数的数。例如:双精度数的浮点形式是用科学计数法,以“D”来代表指数的底的数。例如:-3.1234567D52120.1234568D-45 0.23456789D+10,3.2 数据类型,5.货币型(Currency)货币型数的内部存储空间和范围如表3.2所示。Currency数据类型支持小数点右面4位和小数点左面15位,它是一个精确的定点数据类型,适用于货币计算。浮点(Single和Double)数比Currency的有效范围大得多,但有可能产生小的进位误差。,6.字节型(Byte)字节型表示无符号的整数,范围为0255。除一元减法外,所有可对整数进行操作的运算符均可操作Byte数据类型。因为Byte是从0255的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,VisualBasic先将Byte转换为符号整数。,3.2 数据类型,二、布尔型数据类型(Boolean),布尔型主要用来进行逻辑判断,如果数据的取值只是True或False、Yes或No、On或Off,则可用Boolean型表示。当转换其他的数值类型为Boolean值时,O会转成False,而其他的值则变成True。当转换Boolean值为其他的数据类型时,False成为O,而True成为-1。,3.2 数据类型,三、日期型数据类型(Date)日期型用于存储日期和时间,其可以表示的日期范围从公元100年1月1日到公元9999年12月31日,而时间可以从0:00:00到23:59:59。日期型数据必须使用一对“#”号括起来,否则VisualBasic将不能正确的识别日期:Dim Mydate as date Mydate=#12/5/96#Mydate=#1996-12-5 12:30:00 pm#,3.2 数据类型,四、字符型数据类型(String)字符型用于存放字符串,字符串是用双引号括起来的一串字符,如:”你好!”。使用String类型可以声明两种字符串:可变长度与固定长度的字符串。字符型变量或参数是一个可变长度的字符串,随着对字符串赋予新数据,它的长度可增可减。如果变量总是包含字符串而较少包含数值,就可将其声明为String类型。Dim MyStr As String MyStr=VisualBasic程序设计!,3.2 数据类型,五、对象型数据类型(Object)对象型用于表示任何类型的对象,可以引用程序中对象。在引用对象时,必须利用Set语句为对象引用赋值。初学者最容易犯的一个错误就是对Object类型的变量直接赋值,例如:将窗体对象Form1赋值给Object类型变量temp。错误写法:,错误写法:Sub Form_Click()Dim temp as Object temp=Form1End Sub,正确写法:Sub Form_Click()Dim temp as Object Set temp=Form1End Sub,3.2 数据类型,六、变体型数据类型(Variant)Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何数据类型的数据。当没有说明数据类型时,则变量自动为Variant型,只是Variant型数据占用的内存比其它数据类型多。我们可以使用VarType函数或TypeName函数来决定如何处理Variant中的数据。,3.2 数据类型,在程序代码中,可以用Variant数据类型来替换任何数据类型,这样会更有适应性。如果Variant变量内容是数字,它可以用字符串来表示数字或是用它实际的值来表示,这将由上下文来决定,例如在下面的程序中;Dim Myvar Myvar=3716 Myvar=testvar+1 此时等号左边的Myvar为实 际的值3717 Myvar=Myvar&“how DoyouDo?”此时等号 右边的Myvar为字符串表示的数字“3717”,3.2 数据类型,Variant变量也可包含Empty、Error及Null等特殊值。,1.Empty值 Empty值用来标记尚未初始化(给定初始值)的Variant变量。在赋值之前,Variant变量具有值Empty。值Empty是异于0零长度字符串(”)或Null值的特定值。程序员可以使用 IsEmpty函数来测试一个变量是否具有Empty值:If IsEmpty(z)Then z=0。当Variant变量包含Empty值时,可在表达式中使用它;内含 Empty的Variant在数值的上下文中表示0,如果是用在字符串的 上下文中则表示零长度的字符串(”)。,3.2 数据类型,2.Null值 Variant数值类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数据。Null具有某些唯一的特性:(1)对包含Null的表达式,计算结果总是Null。(2)将Null值、含Null的Variant变量或计算结果为Null的表达式作为参数传递给大多数函数,将会使函数返回Null。测试Variant变量是否包含Null值,可以使用IsNull函数。3.Error值 在Variant数据类型中,error是用来指示在过程中出现错误 时的特殊值。用CVErr函数将实数转换为错误值来产生error值。,3.2 数据类型,七、数据类型之间的转换,表3.3 VisualBasic中的类型转换函数,3.3 常量,VisualBasic用常量表示在整个程序中事先设置的和不会改变数值的数据。在整个应用程序执行过程中,值保持不变的量就是常量。常量可分为一般常量和符号常量。,一、一般常量包括:数值常量、字符常量、布尔常量和日期常量。,1.字符串常量 字符串常量就是用双引号括起来的一串字符。例如:hello!、你好!、欢迎!、等。其中,双引号中无任何字符,也不含空格,称其为空字符串。,3.3 常量,2.数值常量 数值常量由正负号、数字和小数点组成。VisualBasic的数值常量包括:整数、长整数、定点数、浮点数和字节数。,3.布尔常量 布尔常量只有True(真)和False(假)两个值。4.日期常量 用两个“#”符号把表示日期和时间的值括起来表示日期常量。例如:#12/18/2000#。,3.3 常量,二、符号常量 符号常量是指在程序中用符号表示的常量。符号常 量又分为用户定义常量和系统内部定义常量。,1.系统内部定义常量 系统内部定义常量可与应用程序的对象、方法和属性一起使用,一般以vb为前缀。例如:如vbNormal(正常)、vbMaximized(最大化)、vbMinimized(最小化)等。2.用户定义常量 用户定义常量使用Const语句来给常量分配名字、值和类型。,3.3 常量,声明常量的语法为:Public|Private Const As=表达式 说明:表示可以省略的参数,|表示可以选择的参数。常量名的命名规则与建立变量名的规则一样。表达式由数值常量、字符串等常量及运算符组成,可以包含前面定义过的常量,但不能使用函数调用。例如,以下都是正确的用户定义常量:Const PI as Single=3.1415926Private Const PI as Single=3.1415926,3.4 变量,在程序运行过程中,需要用变量来临时存储数据,并且变量中存储的这些数据是可以改变的。每个变量有惟一的名字和相应的数据类型,编程时通过变量名来引用其中存储的数据。,一、声明变量 声明变量即通知程序以后在程序中可以使用此变量。有隐式声明和显示声明:隐式声明:不加任何声明而直接使用 显示声明:每个变量必须事先做声明,才能使用。,3.4 变量,设置强制显式声明变量的方法有以下两种:1.在模块的声明部分中添加如下语句:Option Explicit 2.选择“工具”菜单|“选项”命令,在弹出的对话框中选择“编辑器”选项卡,将“要求变量声明”选项前的复选标记选中即可,如图3.1所示。,图3.1“工具”菜单的“选项对话框”,3.4 变量,二、变量的作用范围 变量的作用范围确定了能够识别并使用变量的那部分代码。按作用域不同,可分为局部变量和全局变量。不同作用范围的变量声明方式:1.普通局部变量:只能在声明它的过程中使用,即不能在一个过程中访问另一个过程中的普通局部变量。声明此类变量的格式如下:Dim 变量名 As 数据类型名,3.4 变量,2.静态局部变量:这种变量也只能在声明它的过程中使用,属于局部变量。但是与普通局部变量的差别在于:静态局部变量在整个程序运行期间均有效,并且过程执行结束后,只要程序还没有结束,该变量的值就仍然存在,该变量占有的空间不被释放。声明此类变量的格式如下:Static 变量名 As 数据类型名,3.模块变量:这种变量必须在某个模块的声明部分进行预声明,可以适用于该模块内的所有过程,但对其他模块内的过不能使用。一般在声明此类变量时,使用如下格式:Private 变量名 As 数据类型名,3.4 变量,4.全局变量:这种变量也必须在某个模块的声明部分进行预先声明,可以适用于该模块及其他模块内的所有过程,也即在整个程序内有效。一般在声明此类变量时,使用如下格式:Public 变量名 As 数据类型名,表3.4 不同作用范围的3种变量声明方式,3.4 变量,三、变量赋值 变量赋值的格式如下:变量名=表达式 可以使用一个表达式的数值来给某个变量赋值。一个普通的常量、变量均属于简单的表达式。例如,给一个变量Temp赋值,可以使用如下几种方式:Temp=7 Temp=Var1 Temp=Var2+1,3.5 运算符,VisualBasic中的运算符包括赋值运算符、数学运算符、位运算符、关系运算符和逻辑运算符。一、赋值运算符 VisualBasic中的赋值运算符是“=”号,其一般格式如下:变量=值 其中“变量”可以是变量、数组的元素或对象属性。“值”可以是常量、变量、表达式或函数返回值。赋值运算符左边必须是变量或对象的属性,不能是数值、常量和表达式。,3.5 运算符,二、算术运算符,表3.5 算术运算符,3.5 运算符,三、关系运算符 关系运算就是确定两个表达式之间的关系。其优先级低于数学运算符,各个关系运算符的优先级是相同的,结合顺序从左到右。关系运算符与运算数构成关系表达式,关系表达式最后结果为布尔值True和False,如果比较的双方有任何一个是NULL,结果是NULL。表3.6列出了VisualBasic中主要的关系运算符。,3.5 运算符,3.5 运算符,四、连接运算符 连接运算就是将两个表达式连接一起。用来进行连接运算的运算符有两个“&”和“+”。“&”运算符用来强制两个表达式字符串连接,而“+”运算则有些不同,如果两个表达式都为字符串,则将两个字符串连接;如果一个是字符串而另一个是数字则进行相加操作。,3.5 运算符,五、逻辑运算符 逻辑运算符通常用来表示比较复杂的关系。VisualBasic中的逻辑运算符如表3.8所示。,3.5 运算符,六、日期运算符 日期型数据是一种特殊的数值型数据,日期型数据之间可以进行加“+”和减“-”运算。1.两个日期型数据相减,结果是一个数值型数据,即两个日期相差的天数。例:#10/17/2005#-#10/1/2005#,结果为16。2.一个日期型数据与一个数值型数据n相加,结果为当前日期型数据n天以后的日期值。例如:#11/1/2005#+16,结果为#11/17/2005#。3.一个日期型数据与一个数值型数据n相减,结果为当前日期型数据n天以前的日期值。例如:#11/27/2005#-10,结果为#11/17/2005#。,3.5 运算符,七、运算符的优先顺序 所有关系运算符的优先顺序都相同,而算术运算符号和逻辑运算符则必须按照下列优先顺序进行处理:指数运算()负号(-)乘法和除法(*、/)整数除法()求模运算(Mod)加法和减法(+、-)字符串连接(&)关系运算符(=、=)逻辑运算(Not、And、Or),3.6 数组,一、数组的概念 数组是具有相同的内部数据类型的顺序索引元素的集合,数组中的每个元素都具有唯一的索引标识号。一个数组中的所有元素具有相同的数据类型。当数据类型为 Variant 时,各个元素能够包含不同类型的数据(对象、字符串、数值等)。在 Visual Basic 中有两种类型的数组:静态数组(总是保持同样的大小)和动态数组(在运行时大小可以改变的数组)。,3.6 数组,一、静态数组 1声明静态数组 有三种方法声明静态数组,用哪一种方法取决于数组应有的有效范围:,(1)建立全局数组,在模块的声明段用 Public 语句声明数组。(2)建立模块级数组,在模块的声明段用 Private或Dim语句声明数组。(3)建立局部数组,在过程中用Dim语句声明数组。,3.6 数组,2语法Public/Private/Dim 数组名(维数定义)As 数据类型,说明:(1)数组名:必需的,遵循标准的变量命名约定。(2)维数定义:可选的。数组变量的维数,最多可以定义 60 维的多维数组。“维数定义”参数使用下面的语法:To,.如果不显式指定“下界”,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。数据类型:可选的,数组中各元素的类型。,3.6 数组,3.设定上下界 声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过 Long 数据类型的范围(-2,147,483,648 到 2,147,483,647)。例如,下列数组声明可出现在模块的声明段:Dim Counters(14)As Integer 15 个元素。Dim Sums(20)As Double 21 个元素。,为建立全局数组,直接用 Public 取代 Dim。(1)在过程之中的声明使用 Dim:(2)用关键字 To 显式提供下界(为 Long 类型):Dim Counters(1 To 15)As Integer,3.6 数组,4多维数组 可用 Visual Basic 声明多维数组。例如,下面的语句声明一个过程内的 10 10 二维数组。Static MatrixA(9,9)As Double 可用显式下界来声明两个维数或两个维数中的任何一个:Static MatrixA(1 To 10,1 To 10)As Double 可以将所有这些推广到二维以上的数组。例如:Dim MultID(3,1 To 10,1 To 15)这个声明建立了三维数组,大小为 4 10 15。元素总数为三个维数的乘积 600。,3.6 数组,5、数组的使用 在建立(声明)一个数组之后,就可以使用数组。引用数组元素的时候要注意以下几点:,数组声明语句不仅定义数组、为数组分配存储空间,而且还能对数组进行初始化,使得数值型数组的元素值初始化为0,字符型数组的元素值初始化为空等等。(2)引用数组元素的方法是在数组名后的括号中指定下标如:t=A(5):s=B(3,4)(3)引用数组元素时,数组名、数组类型和维数必须与数组声明时一致。(4)引用数组元素时,下标值应在数组声明时所指定的范围之内。(5)在同一过程中,数组与简单变量不能同名。,3.6 数组,例:随机产生10个两位整数,找出其中最大值、最小值和平均值,如图3.2所示。,图3.2 数组应用实例,3.6 数组,设计步骤如下:1.建立应用程序用户界面与设置对象属性。2.编写代码。首先在模块通用段声明数组:Dim a(1 to 10)as integer 随机整数的生成由窗体的Load事件代码完成:Private Sub Form_Load()Dim p As String:p=:Randomize For i=1 To 10 a(i)=Int(Rnd*90)+10 p=p&Str(a(i)&,Next i Label4.Caption=LTrim(Left(p,Len(p)-1)End Sub,3.6 数组,求最大、最小以及平均值由“确定”按钮Command2的Click事件代码完成:Private Sub Command2_Click()Dim max As Integer,min As Integer,s As Single min=100:max=10:s=0 For i=1 To 10 If a(i)max Then max=a(i)If a(i)min Then min=a(i)s=s+a(i)Next i Text1.Text=max Text2.Text=min Text3.Text=s/10End Sub,3.6 数组,“重置”按钮Command1的Click事件代码:Private Sub Command1_Click()Form_Load Text1.Text=Text2.Text=Text3.Text=End Sub 最后是“关闭”按钮Command3的Click事件代码:Private Sub Command3_Click()Unload MeEnd Sub,3.6 数组,三、动态数组 1.创建动态数组(1)声明数组:用Public语句(全局数组)、用Private或Dim语句(模块级数组)、用Static或Dim语句(局部数组)声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。Dim DA()(2)用 ReDim 语句分配实际的元素个数。ReDim DA(X+1)ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,遇到这一语句,应用程序在运行时将执行一个操作。,3.6 数组,2ReDim 语句 在过程级别中使用,为动态数组变量重新分配存储空间。其语法如下:ReDim Preserve 数组名(维数定义)As 数据类型,数组名(维数定义)As 数据类型 说明一:(1)Preserve:可选的关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。(2)数组名:必需的。遵循标准的变量命名约定。(3)数组变量的维数:必需的。最多可以定义60维的多维数组。“数组变量的维数”参数使用的语法与固定大小数组的语法相同。(4)数据类型:可选的。声明数组类型。,3.6 数组,说明二:(1)ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public或Dim语句声明过的动态数组的大小。(2)可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。,3.6 数组,例:定义一个动态数组,并修改数组的元素数目和维数:Dim x()As String Dim i As Integer,j As Integer ReDim x(3)For i=0 To 3 x(i)=i&i&i Next ReDim x(1 To 9,3)For i=1 To 9 For j=0 To 3 x(i,j)=i&j Next j Next i,3.6 数组,3保留动态数组的内容 每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。使用具有 Preserve 关键字的 ReDim 语句就可改变数组大小又不丢失数组中的数据。对于多维数组,在用Preserve关键字时,只能改变数组中最后一维的上界。例如:Dim x()As String ReDim x(3)For i=0 To 3 x(i)=i&i&i Next i ReDim Preserve x(4)x(4)=4&4&4,3.6 数组,四、控件数组 1.控件数组的概念 如果在应用程序中用到一些类型相同且功能类似的控件,则可将这些相同的控件视为一个“控件数组”。具有如下的特点:(1)相同的名称(Name)(2)以下标索引值(Index)来识别各个控件 2.创建控件数组 设计时有三种方法创建控件数组:(1)将相同名字赋予多个控件(2)复制现有的控件并将其粘贴到窗体上。(3将控件的 Index 属性设置为非 Null 数值。,3.6 数组,1.通过把控件名字改变为相同名字来添加控件数组元素。步骤1:绘制控件数组中要添加的控件 步骤2:选定其它控件并将其Name属性设置成数组第一个元素的Name值。步骤3:在为数组中的其它控件输入相同名称时,VB将显示一个对话框,要求确认是否要创建控件数组。此时选择“是”,确认操作,如图3.3所示。,图3.3 确认创建控件数组,3.6 数组,2、通过复制现存控件添加控件数组元素 利用复制、粘贴的功能建立控件数组,具体步骤如下:步骤1:绘制控件数组中的第一个控件。步骤2:当控件获得焦点时,选择“编辑”菜单中的“复 制”命令,或按“Ctrl+C”组合键。步骤3:在“编辑”菜单中,选择“粘贴”命令,或按“Ctrl+V”组合键。VB将显示一个对话框询问是否确认创建控件数组。选择“是”,确认操作,如图3.3所示,将得到控件数组中的第二个控件元素。步骤4:重复步骤3,可得到控件数组中的其他控件元素。,3.6 数组,3.通过指定控件的索引值创建控件数组 直接指定控件数组中第一个控件的索引值为0,然后利用前两种方法中的任何一种添加控件数组的成员,将不会出现对话框询问是否创建控件数组。个体步骤如下:步骤1:绘制控件数组中的第一个控件。步骤2:将其索引值改为0。步骤3:用现有的控件元素,复制控件数组中的其他控件,将不会出现对话框询问是否确认创建控件数组。,3.7基本控制结构,VisualBasic采用事件驱动的调用过程的程序设计方法,包含三种基本结构:顺序结构、选择结构和循环结构。一、顺序结构 顺序结构就是按照语句的顺序一条一条地执行。1.赋值语句 Let 变量=表达式 赋值语句具有计算和赋值的双重功能,它首先计算“=”号右边的表达式,然后把结果赋给“=”号左侧的变量。例如,下面两个语句的作用是不同的:a=b 将b的值赋给a:b=a 将a的值赋给b,3.7基本控制结构,2.Print方法 Print方法用于在窗体、立即窗口、图片框、打印机等对象中显示文本字符串和表达式的值。Print方法的格式和功能与早期Basic语言中的Print语句类似。其使用语法如下:对象表达式.Print表达式表,|;其中,“对象表达式”可以是窗体、立即窗口(Debug)、图片框、打印机(Printer)等对象。如果省略“对象表达式”,则在当前窗体上输出。例如:Form1.Print Basic!在Form1窗体中显示Basic!,3.7基本控制结构,Print方法的显示格式有分区格式和紧凑格式两种。当各表达式用逗号作为分隔符时,按打印区显示数据项,每隔14列开始一个打印区,每列的宽度是所选字体磅值大小的所有字符的平均宽度。当各表达式用分号作为分隔符时,输出格式为紧凑格式,此时将在每个数值后面增加一个空格,如果数值为正数,将把正号显示为空格。为了使数据按指定的位置输出,VB提供了几个与Print配合使用的函数。(1)Tab函数使用格式如下:Tab(n),3.7基本控制结构,其中,n为数值表达式,其值为整数,它是下一个输出位置的列号,表示在输出前把光标或打印头移到该列。通常最左边的列号为1。如果当前的显示位置已经超过n,则自动下移一行。当n大于行的宽度时,显示位置为n Mod 行宽,如果n1,则把输出位置移到第一列。Tab函数把显示或打印位置移到由参数n指定的列数,从此列开始输出数据。要输出的内容放在Tab函数后面,并用分号隔开。例如:Print Tab(10);姓名;Tab(30);年龄,3.7基本控制结构,(2)Spc函数 在Print方法或Print#语句中,用Spc函数跳过n个空格。使用格式如下:Spc(n)其中,n是在显示或打印下一个表达式之前插入的空格数。Spc函数与输出项间用分号隔开。例如:Print ABC;Spc(5);DEP 输出:ABC DFE 当Print方法与不同大小的字体一起使用时,使用Spc函数打印的空格字符的宽度总是等于选用字体内以磅数为单位的所有字符的平均宽度。,3.7基本控制结构,例:设计一个窗体说明Print方法的使用。在form1窗体上设计如下事件过程:Private Sub Form_Click()Print Lets study VisualBasic 10*7 FontSize=12 Print 10*7=,10*7,3.7基本控制结构,Print FontSize=10 FontBold=True 设置字体为黑体 Print 欢迎使用;FontSize=15 Print VisualBasic!End Sub,3.7基本控制结构,二、选择结构 所谓选择结构,可以根据不同的情况做出不同的选择,执行不同的操作。VisualBasic支持的3种选择结构分别是:IfThen结构、IfThenElse结构、Select Case结构。1.IfThen结构 使用IfThen结构可以有条件地执行某些语句,它有两种语法形式:(1)只选择执行一条语句。语法为:If条件Then语句 例如:If x=0 Then y=x+1,3.7基本控制结构,(2)需要执行多条语句。语法为:If 条件 Then 若干语句 end If 例如:If intage23 Then Print“您已经超龄,无法入选国奥队!”Print“感谢您对中国足球的关怀!”end If,3.7基本控制结构,2.IfThenElse结构 使用IfThenElse结构可以从两个程序流程分支中选择一个分支执行。语法为:If 条件 Then 语句序列1 Else 语句序列2 End If例如:求两个数中最大数 If x y Then MaxOfTwo=x Else MaxOfTwo=y End If,3.7基本控制结构,当执行到IfThenElse结构时,VisualBasic会首先测试条件1。如果它为False,VisualBasic就测试条件2,依次类推,直到找到一个为True的条件。当它找到一个为True的条件时,VisualBasic就会执行相应的语句序列,然后执行End If语句后面的代码。,3.7基本控制结构,例如:编写程序,随着用户不断单击窗体,更改窗体的标题:Private sub Form_Click()static Index as Integer Index=Index+1 If Index=1 Then Form1.Caption=“床前明月光”ElseIf Index=2 Then Form1.Caption=“疑是地上霜”ElseIf Index=3 Then Form1.Caption=“举头望明月”ElseIf Index=4 Then Form1.Caption=“低头思故乡”Else Index=0 end If End Sub,3.7基本控制结构,3.IIF函数 IIf函数的语法结构为:IIf(,)当条件表达式的值为真时,函数返回值为真部分,否则返回假部分。例如:输入x,计算y的值,其中:x+1(x=0)y=2x-1(x0)设计窗体如图3.3所示,在代码窗口中增加如下代码。,3.7基本控制结构,图3.3 计算函数y的值,Private Sub Command1_Click()Dim x as Single,y as Single x=Val(Text1.Text)y=IIf(x=0,x+1,2*x-1)Text2.Text=y End Sub,3.7基本控制结构,4.Select Case结构 Select Case结构可以很好的完成多重判定任务,这种结构不但清楚易懂,而且执行也比较快速。Select Case结构的语法为:Select Case测试条件 Case 表达式1 语句序列1 Case 表达式2 语句序列2:Case Else 语句序列nEnd Select,3.7基本控制结构,下面我们使用SelectCase结构改写上一个例子:Private Sub Form_Click()Static Index As Integer:Index=Index+1 Select Case Index Case 1 Form1.Caption=“床前明月光”Case 2 Form1.Caption=“疑是地上霜”Case 3 Form1.Caption=“举头望明月”Case 4 Form1.Caption=“低头思故乡”Case Else Index=0 end select:End Sub,3.7基本控制结构,Select Case语句的表达式结果表列可以有四种格式:(1)表达式结果:此种格式表达式结果表列中只有一个数值或字符串供用户与表达式的值进行比较。例如:Case 1或者Case char等。(2)表达式结果1,表达式结果2,表达式结果n:此种格式在某一个表达式结果表列中有多个数值或字符串供用户与表达式的值进行比较,多个取值之间用逗号间隔。(3)表达式结果1 To 表达式结果2:此种格式在表达式结果表列中提供了一个数值或字符串的取值范围,可以将此范围内的所有取值与表达式的值进行比较。(4)Is 关系运算符 数值或字符串:此种格式使用了关键字“Is”,其后只能使用各种关系运算符:“=”、“”、“=”和“”等。,3.7基本控制结构,三、循环结构 所谓循环结构,表示在执行语句时,需要对其中的某个或某部分语句重复执行多次。对于此类情况可以利用各种循环结构来实现。VisualBasic支持的循环结构有:For循环、While循环和Do循环语句结构。1.For循环 For循环属于计数型循环,程序按照此种结构中指明的循环次数来执行循环体部分。,3.7基本控制结构,格式为:For 循环变量=初始值 To 终值 Step 步长 循环体 Exit For 循环体Next 循环变量格式说明:(1)循环变量:用于统计循环次数的变量,变量为数值型变量。(2)初始值:用于设置循环变量的初始取值,为数值型变量。(3)终值:用于设置循环变量的最后取值,为数值型变量。(4)步长:用于决定循环变量每次增加的数值。,3.7基本控制结构,(5)循环体:需要重复执行的部分。(6)Exit For:在某些情况下,需要中途退出For循环时使用。(7)Next 循环变量:用于结束一次For循环。For语句时的执行过程是:先令循环变量取为初始值,然后检验循环变量的取值是否超出终值:若步长为正值,则检验循环变量是否大于终值;若步长为负值,则检验循环变量的取值是否小于终值。若循环变量没有超出终值,则执行一次内部的循环体,然后将循环变量加上步长赋值给循环变量本身,再与终值进行比较。,3.7基本控制结构,例如:编写一个函数,求从1到N(正整数)的所有正整数之和。Private Function Sum1ToN(N As Integer)As Integer Dim s,i As Integer For i=1 To N s=s+i Next i Sum1ToN=sEnd Function,3.7基本控制结构,还有一个集合For循环语句。格式为:For Each 集合中元素 in 集合 循环体 Next 元素 该语句对集合中的每个元素进行一次循环,直