第三章 VB的程序设计基础
[日期:2005-09-09] 来源: 作者: [字体:大 ( javascript:ContentSize(16) ) 中 ( javascript:ContentSize(14) ) 小 ( javascript:ContentSize(12) )]
2.1 VB编码规则
1. 语言元素
VB的语言基础是BASIC语言,VB程序的语言元素主要由:
关键字(如: Dim、Print、Cls)
函数(如:Sin()、Cos()Sqr())
表达式(如:Abs(-23.5)+45*20/3 )
语句(如:X=X+5 、 IF……ELSE……END IF)等组成。
2. VB代码书写规则
(1) 程序中不区分字母的大小写,Ab 与AB等效;
(2) 系统对用户程序代码进行自动转换:
1) 对于VB中的关键字,首字母被转换成大写,其余转换成小写
2) 若关键字由多个英文单词组成,则将每个单词的首字母转换成大写
3) 对于用户定义的变量、过程名,以第一次定义的为准,以后输入的自动转换成首次定义的形式
3. 语句书写规则
(1)在同一行上可以书写多行语句,语句间用冒号(:)分隔
(2)单行语句可以分多行书写,在本行后加续行符:空格和下划线 _
(3) 一行允许多达255个字符
4. 程序的注释方式
(1)整行注释一般以 Rem开头,也可以用撇号 ';
(2)用撇号 ' 引导的注释,既可以是整行的,也可以直接放在语句的后面,最方便;
(3)可以利用“编辑”工具栏的“设置注释块”、“解除注释块”来将设置多行注释。
5. 保留行号和标号
VB源程序接受行号与标号,但不是必须的(早期的BASIC语言中必须用行号)。
标号是以字母开始以冒号结束的字符串,一般用在GOTO语句(现在很少用)中。
2.2 VB的语言基础
1.数据类型
VB的标准数据类型
数据类型 关键字 类型符 前缀 存储空间 范围
数值数据类型 字节型 Byte Byt 1 个字节 0 到 255
整型 Integer % Int 2 个字节 -32,768 到 32,767
长整型 Long & Lng 4 个字节 -2,147,483,648 到 2,147,483,647
单精度型 Single ! Sng 4 个字节 负数:-3.402823E38 到 -1.401298E-45;正数:1.401298E-45 到 3.402823E38
双精度型 Double # Dbl 8 个字节 负数: -1.79769313486232E308 - 4.94065645841247E-324;正数:4.94065645841247E-324 1.79769313486232E308
货币型 Currency @ Cur 8 个字节 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
逻辑型 Boolean Bln 2 个字节 True 或 False
日期型 Date Dtm 8 个字节 100 年1月 1日 到 9999 年 12 月 31 日
对象型 Object Obj 4 个字节 任何 Object 引用
变长字符型 String $ Str 10 字节加字符串长度 0 到大约 20 亿
定长字符型 String $ Str 字符串长度 1 到大约 65,400
变体数字型 Variant Vnt 16 个字节 任何数字值,最大可达 Double 的范围
变体字符型 Variant Vnt 22 个字节加字符串长度 与变长 String 有相同的范围
注意:
1)VB中对没有声明的变量其缺省的数据类型是变体型,可以用来存储各种数据,但所占用的内存比其它类型都多。为提高运行效率(整型效率较高),或达到一定的运算精确度(浮点型精度较高,但运行较慢),应合理的定义数据类型。
2) 逻辑型数据只有True 和False两个值,转换成整型时,True=-1 ,False=0,将其它类型转换成逻辑型时,非0数转换为True ,0转换为False。
3) 字符型可以包括所有的西文字符和汉字,字符必须用双引号括" "起来, 如:"abc123"
4)日期型数据按8字节的浮点数来存储,日期型数表示方式有两种:可以用号码符#括起来,也可以用数字序列表示(小数点左边的数字代表日期,右边代表时间,0为午夜,0。5为中午12点,负数表示是1899年12月31日前的日期和时间)。
如:#3/22/2002# #2002-3-22 14:30:20#
Dim T As Date
T=-2.5
Print T ' 打印出来的结果是1899-12-28 12:00:00
5)任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。
2. 变量与常量
(1)变量或常量的命名规则
1) 必须以字母或汉字开头,由字母、汉字、数字或下划线组成,长度≤255个字符;
2) 不能使用VB中的关键字,并尽量不与VB中标准函数名同名;如:Dim 、Sin
3)VB中不区分变量的大小写,一般变量首字母用大写,其余用小写;常量全部用大写字母表示
4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。
(2)变量声明
1)用Dim语句进行显式声明
语句形式: Dim 变量名 [As 类型] 如: Dim intX As integer
说明:·如果没有As 类型,则默认为变体类型。
·可在变量名后加类型符来代替As 类型 如: Dim intX%
·一条语句可以同时定义多个变量,但每个变量必须有自己的类型声明,类型声明不能共用;
·字符串变量根据其存放的长度是否固定,定义方法不同:
定长字符串: Dim strA As String*10
表示最多存放10个字符,如果赋值不足10个,则右补空;若多于10个,则多余部分截去。
不定长字符串:Dim strA As String ’最多可存放2MB个字符
2) 隐式声明
VB中允许变量不经过声明就直接使用,这种称为隐式声明,所有隐式声明的变量都是变体型的。
隐式声明容易造成错误,为了调试程序方便,一般对使用的变量都进行声明,可以在通用声明段使用Option Explicit 语句来强制显式声明所有变量。
(3)常量
1)直接常量
指在程序中直接给出值的数据,如:123、123&、123.45、1.234E2 、123D3分别表示整型、长整型、单精度浮点型(小数形式)、单精度浮点型(指数形式)、双精度浮点型。
八进制常数: 在数值前加&O ,如 &O123
十六进制常数:在数值前加&H ,如&H123
2)用户声明的符号常量
用Const来声明: Const 符号常量名 [As 类型] = 表达式
如:Const PI=3.14159 '声明了常量PI,代表3.14159,单精度型
Const MAX As Integer=&O144 ''声明了常量MAX,代表八进制数144,整型
Const COUNT#=45.67 '声明了常量COUNT,代表45.67,双精度型
3)系统提供的常量
系统定义的常量位于对象库中,在对象浏览器中的Visual Basic(VB)和Visual Basic for Aplication(VBA)等对象库中列出了VB的常量。这些常量可以与应用程序的对象、方法、属性一起使用。
如:Form1.WindowsState=vbMaximized 表示将窗口极大化。
3. 运算符
(1) 算术运算符
运算符 含义 优先级 示例 结果
^ 乘方 1 Ia^2 9
- 负号 2 -iA -3
* 乘 3 IA* iA* iA 27
/ 除 3 10/iA 3.33333333333333
\ 整除 4 10\iA 3
Mod 取模 5 10 Mod iA 1
+ 加 6 10+iA 13
- 减 7 IA-10 -7
说明:设表中的变量iA=3, 为整型。
算术运算符两边的操作数应该是数值型,若是数字字符或逻辑型,则自动转换为数值类型后再运算。
(2) 字符串运算符
运算符 作用 区别 示例 结果
& 将两个字符串拼接起来 连接符两旁的操作数不管是字符型还是数值型,系统先将操作数转换成字符,然后再连接。 "123"&55"abc"+12 "12355""abc12"
+ 连接符两旁的操作数均为字符型;若均为数值型则进行算术加法运算;若一个为数字字符型,一个数值型,则自动将数字字符转换为数值,然后进行算术加;若一个为非数字字符型,一个数值型,则出错。 "123"+55"abc"+12 178出错
(3) 关系运算符
运算符 含义 示例 结果
= 等于 "ABCDE"="ABR" False
> 大于 "ABCDE">"ABR" False
>= 大于等于 "bc">="大小" False
< 小于 23<3 False
<= 小于等于 "23"<="3" True
<> 不等于 "abc"<>"ABC" True
Like 字符串匹配 "ABCDEFG" Like "*DE*" True
Is 对象引用比较
注意:
1) 如果两个操作数都是数值型,则按其大小比较
2) 如果两个操作数都是字符型,则按字符的ASCII码值从左到右一一比较
3) 汉字字符大于西文字符
4) 关系运算符的优先级相同
5) VB6.0中Like运算符与通配符的使用:
?——表示任何单一字符
*——表示0个或多个字符
#——表示任何一个数字(0 - 9)
[字符列表]——表示字符列表中的任何单一字符
[!字符列表]—— 表示不在字符列表中的任何单一字符
(4) 逻辑运算符
运算符 含义 优先级 说明 示例 结果
Not 取反 1 当操作数为假时,结果为真 Not FNot T T F
And 与 2 两个操作数均为真时,结果才为真 T And TF And FT And FF And T TFFF
Or 或 3 两个操作数中有一个为真时,结果为真 T Or TF Or FT Or FF Or T TFTT
Xor 异或 3 两个操作数不相同,结果才为真,否则为假 T Xor FT Xor T TF
Eqv 等价 4 两个操作数相同时,结果才为真 T Eqv FT Eqv T FT
Imp 蕴含 5 第一个操作数为真,第二个操作数为假时,结果才为假,其余都为真 T Imp FT Imp T FT
说明:
1)若有多个条件时,And必须全部条件为真才为真;Or只要有一个条件为真就为真。
2)如果逻辑运算符对数值进行运算,则以数字的二进制值逐位进行逻辑运算。And运算常用于屏蔽某些位;Or运算常用于把某些位置1。
如:12 And 7 表示对1100与0111进行And运算,得到二进制值100,结果为十进制4。
3)对一个数连续进行两次Xor操作,可恢复原值。在动画设计中,用Xor可恢复原来的背景。
4.表达式
(1)表达式的组成
表达式由常量、变量、运算符、函数和圆括号按一定的规则组成,通过运算后有一个结果,运算结果的类型由数据和运算符共同决定。
(2)表达式的书写规则
1)乘号不能省略
2)括号必须成对出现,均使用圆括号,可以嵌套,但必须配对。
3)表达式从左到右在同一基准上书写,无高低、大小之分。
例:sqr((3*x+y)-z)/(x*y)^4
(3)不同数据类型的转换
操作数的数据类型应该符合要求,不同的数据应该转换成同一类型。在算术运算中,如果操作数的数据精度不同,VB规定运算结果采用精度较高的数据类型。
(4)优先级
同一表达式中,不同运算符的优先级是:算术运算符 > 字符运算符 > 关系运算符 > 逻辑运算符
注意:对于存在多种运算符的表达式,可增加圆括号改变优先级或使表达式更清晰。
2.3 VB的公共函数
1. 数学函数
VB中常用的数学函数
函数名 功能 示例 结果
Sqr(x) 求平方根 Sqr(9) 3
Log(x) 求自然对数,x>0 Log(10) 2.3
Exp(x) 求以e为底的幂值,即求ex Exp(3) 20.086
Abs(x) 求x的绝对值 Abs(-2.5) 2.5
Hex[$](x) 求x的十六进制数,返回的是字符型值 Hex[$](28) "1C"
Oct[$](x) 求x的八进制数,返回的是字符型值 Oct[$](10) "12"
Sgn(x) 求x的符号, 当x>0, 返回1 ;x=0, 返回0; x<0, 返回-1 Sgn(15) 1
Rnd(x) 产生一个在(0,1)区间均匀分布的随机数,每次的值都不同;若x=0,则给出的是上一次本函数产生的随机数 Rnd(x) 0-1之间的数
Sin(x) 求x的正弦值,x的单位是弧度 Sin(0) 0
Cos(x) 求x的余弦值,x的单位是弧度 Cos(1) 0.54
Tan(x) 求x的正切值,x的单位是弧度 Tan(1) 1.56
Atn(x) 求x的反正切值,x的单位是弧度,函数返回的是弧度值 Atn(1) 0.79
2. 字符函数
(1)字符串编码
在Windows采用的DBCS(Double Byte Character Set)编码方案中,一个汉字在计算机内存中占2个字节,一个西文字符(ASCII码)占1个字节,但在VB中采用的是Unicode(ISO字符标准)来存储字符的,所有字符都占2个字节。为方便使用,可以用StrConv函数来对Unicode 与DBCS进行转换,可以用函数Len()函数求字符串的字符数,用 LenB()函数求字符串的字节数。
函数名 功能 示例 结果
Len(x) 求x字符串的字符长度(个数) Len("ab技术") 4
LenB(x) 求x字符串的字节个数 LenB("ab技术") 8
Left(x,n) 从x字符串左边取n个字符 Left("ABsYt",2) "AB"
Right(x,n) 从x字符串右边取n个字符 Right("ABsYt",2) "Yt"
Mid(x,n1,n2) 从x字符串左边第n1个位置开始向右取n2个字符 Mid("ABsYt",2,3) "BsY"
Ucase(x) 将x字符串中所有小写字母改为大写 Ucase("ABsYug") ABSYUG
Lcase(x) 将x字符串中所有大写字母改为小写 Ucase("ABsYug") absyug
Ltrim(x) 去掉x左边的空格 Lrim(" ABC ") "ABC "
Rtrim(x) 去掉x右边的空格 Trim(" ABC ") " ABC"
Trim(x) 去掉x两边的空格 Trim(" ABC ") "ABC"
Instr(x,"字符", M) 在x中查找给定的字符,返回该字符在x中的位置,M=1不区分大小写,省略则区分 Instr("WBAC","B") 2
String(n,"字符") 得到由n个首字符组成的一个字符串 String(3,"abcd") "aaa"
Space (n) 得到n个空格 Space (3) "□□□"
Replace(C,C1,C2,N1,N2) 在C字符串中从N1开始将C2替代N2次C1,如果没有N1表示从1开始 Replace("ABCASAA","A","12",2,2) "ABC12S12A"
StrReverse (C) 将字符串反序 StrReverse ("abcd") "dcba"
(2)常用的字符串函数
3. 日期与时间函数
常用的日期与时间函数
函数名 含义 示例 结果
Date () 返回系统日期 Date () 02-3-19
Time() 返回系统时间 Time() 3:30 :00 PM
Now 返回系统时间和日期 Now 02-3-19 3:30 :00
Month(C) 返回月份代号(1-12) Month("02,03,19") 3
Year(C) 返回年代号(1752-2078) Year("02-03-19") 2002
Day(C) 返回日期代号(1-31) Day("02,03,19") 19
MonthName(N) 返回月份名 MonthName(1) 一月
WeekDay() 返回星期代号(1-7),星期日为1 WeekDay("02,03,17") 1
WeekDayName(N) 根据N返回星期名称, 1为星期日 WeekDayName(4) 星期三
增减日期函数: DateAdd(要增减日期形式,增减量,要增减的日期变量)
例:计算期末考试日期:DateAdd("ww",15,#2002/3/19#)
求日期之差函数: DateDiff(要间隔日期形式,日期一,日期二)
例:计算距毕业天数: DateDiff("d", Now, #2005/6/30#)
日期形式
日期形式 yyyy q m y d w ww h n s
意义 年 季 月 一年的天数 日 一周的天数 星期 时 分 秒
4. 转换函数
函数名 功能 示例 结果
Str (x) 将数值数据x转换成字符串 Str (45.2) "45.2"
Val(x) 将字符串x中的数字转换成数值 Val("23ab") 23
Chr(x) 返回以x为ASCII码的字符 Chr(65) "A"
Asc(x) 给出字符x的ASCII码值,十进制数 Asc("a") 97
Cint(x) 将数值型数据x的小数部分四舍五入取整 Cint(3.6) 4
Int(x) 取小于等于x的最大整数 Int(-3.5)Int(3.5) -43
Fix(x) 将数值型数据x的小数部分舍去 Fix(-3.5) - 3
CBool(x) 将任何有效的数字字符串或数值转换成逻辑型 CBool(2) CBool("0") TrueFalse
CByte(x) 将0-255之间的数值转换成字节型 CByte(6) 6
CDate(x) 将有效的日期字符串转换成日期 CDate(#1990,2,23#) 1990-2-23
CCur(x) 将数值数据x转换成货币型 CCur(25.6) 25.6
Round(x,N) 在保留N位小数的情况下四舍五入取整 Round(2.86,1) 2.9
CStr(x) 将x转换成字符串型 CStr(12) "12"
CVar(x) 将数值型数据x转换成变体型 CVar("23")+"A" "23A"
CSng(x) 将数值数据x转换成单精度型 CSng(23.5125468) 23.51255
CDbl(x) 将数值数据x转换成双精度型 CDbl(23.5125468) 23.5125468
5. 格式输出Format函数
Format函数用于制定字符串或数字的输出格式。
语法:x = Format (expression, fmt )
expression是所输出的内容。fmt是指输出的格式,这是一个字符串型的变量,这一项若省略的话,那么Format函数将和Str函数的功能差不多。如:
语句 输出
Format (2, “0.00”) 2.00
Format (.7, “0%”) 70%
Format (1140, “$#,##0”) $1,140
fmt字符的意义
字符 意义 字符 意义
0 显示一数字,若此位置没有数字则补0 . 小数点
# 显示一数字,若此位置没有数字则不显示 , 千位的分隔符
% 数字乘以100并在右边加上”%”号 - + $ ( ) 这些字出现在fmt里将原样打出
Format函数对时间进行输出时的意义
fmt 输出 fmt 输出
m/d/yy 8/16/96 h:mm:ss a/p 10:41:29 p
d-mmmm-yy 16-August-96 h:mm 22:41
d-mmmm 16-August h:mm:ss 22:41:29
mmmm-yy august-96 m/d/yy h:mm 8/16/96 22:41
hh:mm AM/PM 10:41 PM
6.InputBox函数与MsgBox函数
(1)InputBox函数
语法:x = InputBox (prompt, title, default, xpos, ypos, helpfile, context)
其中,prompt是提示的字符串,这个参数是必须的。title是对话框的标题,是可选的。default是文本框里的缺省值,也是可选的。xpos,ypos决定输入框的位置。helpfile,context用于显示与该框相关的帮助屏幕。返回值 x 将是用户在文本框里输入的数据,x是一个字符串类型的值。如果用户按了Cancel钮,则 x 将为空字符串。
(2)MsgBox函数
语法:Action = MsgBox (msg, type, title)
数值 符号常量 意义
0 vbOKOnly 只显示 Ok 按钮
1 vbOKCancel 显示 Ok Cancel 按钮
2 vbAbortRetryIgnore 显示 Abor Retry Ignore 按钮
3 vbYesNoCancel 显示 Yes No Cancel 按钮
4 vbYesNo 显示 Yes No 按钮
5 vbRetryCancel 显示 Retry Cancel 按钮
16 vbCritical Stop Sign对极其重要的问题提醒用户
32 vbQuestion Question Mark增亮没有危险的问题
48 vbExclamation Exclamation Mark强调警告用户必须知道的事情
64 vbInformation Information Mark可以使乏味的信息变得有趣
0 vbDefaultButton1 第一个按钮缺省
256 vbDefaultButton2 第二个按钮缺省
512 vbDefaultButton3 第三个按钮缺省
Action的值
返回值 含义 返回值 含义
1 选择 Ok 按钮 5 选择 Ignore 按钮
2 选择 Cancel 按钮 6 选择 Yes 按钮
3 选择 Abort 按钮 7 选择 No 按钮
4 选择 Retry 按钮
5.1 数组的概念
1.引例
求100个学生的平均成绩及超过平均成绩的人数。
如果用一般变量来表示成绩,需要用100个变量,如:mark1、mary2、……mark100。若用数组,可以只用一个来表示mark(1
To 100)。
2.基本概念
数组:是同类型变量的一个有序的集合。
如:A(1 To 100),表示一个包含100个数组元素的名为A的数组。
数组元素: 即数组中的变量。用下标表示数组中的各个元素。
表示方法:数组名(P1,P2,……)
其中P1、P2表示元素在数组中的排列位置,称为“下标”。
如:A(3,2)代表二维数组A中第3行第2列上的那个元素。
数组维数: 由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组。
VB中有一维数组、二维数组、……最多60维数组。
下标: 下标表示顺序号,每个数组有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至又是一个数组元素。
下标的取值范围是:下界 To 上界 ,缺省下界时,系统默认取0。
3.数组声明
数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,用来存储数组元素。
声明内容:数组名、类型、维数、数组大小。
一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。
静态数组:声明时确定了大小的数组。
动态数组: 声明时没有给定数组大小(省略了括号中的下标),使用时需要用ReDim语句重新指出其大小。
使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。
5.2 静态数组及声明
1. 一维数组
静态一维数组的声明形式:
Dim 数组名(下标) [As 类型]
说明:(1)下标必须为常数,不可以为表达式或变量;
(2)下标下界最小为-32768,最大上界为32767;省略下界,其默认值为为0,一维数组的大小为:上界-下界+1
(3) 如果省略类型,则为变体型
例: (1) Dim A(10) As Integer
声明了A是数组名、整型、一维数组、有11个元素,下标的范围是0~10。
(2) Dim B(-3 To 5) As String*3
声明了B是数组名、字符串型、一维数组、有9个元素,下标的范围是-3~5,每个元素最多存放3个字符。
2.多维数组
静态多维数组的声明形式:
Dim 数组名(下标1[,下标2…]) [As 类型]
说明: (1)下标个数决定数组的维数,最多60维。
(2)每一维的大小=上界-下界+1;数组的大小=每一维大小的乘积。
例:Dim C(-1 To 5, 4) As Long
声明了C是数组名、长整型、二维数组、第一维下标范围为-1~5,第二维下标的范围是0~4,占据7x 5个长整型变量的空间。
3.注意事项
(1)在有些语言中,下界一般从1开始,为了便于使用,在VB的窗体层或标准模块层用Option Base n 语句可重新设定数组的下界,如Option Base 1。
(2) 在数组声明中的下标关系到每一维的大小,是数组说明符,而在程序其他地方出现的下标为数组元素,两者写法相同,但意义不同。
(3) 在数组声明时的下标只能是常数,而在其他地方出现的数组元素的下标可以是变量。
5.3 动态数组及声明
1. 动态数组的建立与声明
建立动态数组的方法是:利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是:
ReDim 数组名(下标1[,下标2…]) [As 类型]
其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。
例: Dim D() As Single
Sub Form_Load()
……
ReDim D(4,6)
……
End Sub
2.注意事项
(1)在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量;
(2)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。
(3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。
3.动态数组使用示例
5.4 数组的基本操作
1. 给数组元素赋初值
(1) 利用循环结构
例:Dim iA(1 To 10) As Integer
For i=1 To 10
A(i)=0
Next i
(2) 利用Array函数
例:Dim a As Variant, b As Variant, i%
a = Array (1,2,3,4,5)
b = Array ("abc","def","67")
For i=0 To Ubound (a)
Picture1.print a(i);"";
Next i
For i=0 To Ubound (b)
Picture1.print b(i);"";
Next i
2.数组的输入
(1) 通过InputBox函数输入适合输入少量数据。
例:Dim sB(3,4) As singer
For i=0 To 3
For j=0 To 4
SB(i,j) =InputBox("输入" & i & j & "的值")
Next j
Next i
(2) 通过文本框控件输入
对大批量的数据输入,采用文本框和函数split()\join()进行处理,效率更高。
3.数组的赋值
在VB6.0中可以直接将一个数组的值赋值给另一个数组:
Dim a(3) as integer, b() as integer
A(0)=2: A(1)=5: A(2)=-2: A(3)=2
b=a
在早期的VB中,这需要用循环语句才可以实现:
ReDim b(UBound(a))
For I=0 to UBound(a)
b(I)=a(I)
Next i
注意:(1)赋值号两边的数据类型必须一致;
(2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组;
(3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。
4.数组的输出
用For……Next循环语句输出。
5.求数组中最大元素和所在下标及各元素之和
求数组中最大元素及下标,一般假设第一个元素及下标为最大,然后将该数与数组中的其他元素逐一比较,若有比其大的就替换,同时替换下标。
6.交换数组中各元素
交换的要求是将数组第一个元素与最后一个交换,第二个与倒数第二个交换,依次类推。
5.5 控件数组
1.控件数组的概念
控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的数组。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)……
2.控件数组的建立
(1)在设计时建立
步骤:1)在窗体上画出某控件,并进行属性设置。
2)选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。
3)进行事件过程的编程。
(2)运行时添加控件数组
方法:1)在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。
2)在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。
3)每个添加的控件数组通过Left 和Top属性,确定其在窗体上的位置,并将Visible设置为True。
使用示例:建立一个类似国际象棋的棋盘,要求黑白交替,运行时单击某个棋格,会改变颜色并显示其序号。
5.6 自定义数据类型
1. 自定义数据类型的定义
是指由若干标准数据类型组成的一种复合类型,也称为记录类型。
(1)定义方式:
Type 自定义类型名
元素名[(下标)] As 类型名
……
元素名[(下标)] As 类型名
End Type
元素名:表示自定义类型中的一个成员
下标(可选):表示是数组,
类型名:为标准类型
例:定义一个学生信息的自定义类型:
Type studtype
No As Integer ' 定义学号
Name As String*10 ' 定义姓名
Sex As String*2 ' 定义性别
Mark(1 TO 4) As Single ' 定义4门课程的成绩
Total As Single ' 定义总分
End Type
(2)注意事项
1)自定义类型一般在标准模块(.bas)中定义,默认是Public
2)自定义类型中的元素可以是字符串,但应是定长字符串
3) 不可把自定义类型名与该类型的变量名混淆
4) 注意自定义类型变量与数组的差别:它们都由若干元素组成,前者的元素代表不同性质、不同类型的数据,以元素名表示不同的元素;后者存放的是同种性质、同种类型的数据,以下标表示不同元素。
2. 自定义型变量的声明和使用
使用形式: Dim 变量名 As 自定义类型名
例如: Dim student As studtype, mystud As studtype
自定义类型中元素的表示方法是:变量名 . 元素名 如:student.name student.mark(4)
为了简单起见,可以用With …… End With 语句进行简化。 例:
With student
.no=99001
.name=""
.sex=""
.total=0
for I=1 to 4
.mark(I)=int(rnd*101) '随机产生0 - 100之间的分数
.total=.total+.may(I)
next I
End With
Mystud=student ' 同种自定义类型变量可以直接赋值
3.自定义类型数组的使用
自定义类型数组就是数组中的每个元素都是自定义类型。
例如:自定义一个由学生姓名、成绩组成的学生记录类型,用来存放100个学生的记录。