数组是内存中连续存放的一组元素。分静态(定长)和动态(变长)数组。
动态数组是在程序运行中可以改变长度的一组元素。
静态数组:
public/private/dim 数组名(下标) as 类型
下标:为整形(integer,可为负),默认以0开始。a(10)下载为0到10,故为11个元素。超出范围将产生 越界错误。亦可自定上下界a(3 to 23)
类型:多种,可基础类型,自定义,对象等
Dim a(-3 To 10) As Integer ’14个元素,,10-(-3)+1=14
Dim i As Integer
For i = -3 To 10
a(i) = i
List1.AddItem a(i)
Next i
动态数组
redim preserve 数组名(下标) as 类型
preserve表示改变长度时,原元素值不变
定义动态数组,两种方式:
一、redim a(3) as integer
redim a(4) as integer
二、dim a( ) as integer ‘如果是二维:dim a(,) as string,同理三维 dim a(,) as long
redim a(4) as integer
动态数组只能修改最后一维,可变大也可变小;可改变上界或下界,但如果有preserve时只能修改上界。
动态数组可改变数组类型,只能是variant类型时,且能够由Variant转换而来,并且不能有preserve关键字
所以有preserve时,只能修改上界
初始化: 数值初始为0,字串初始为空串(“”),定长字串为0填充,Variant为Empty,对象为Nothing
动态数组中插入或删除一个数组:
插入: 先增加长度,其后值向后移动,插入点写入值
选择排序法:从第一始,与后面所有元素比较,判断大(小)则向前移;第二次从第二始,再与后面所有元素比较,如此得到排列。
冒泡法: 共循环N-1次,每次两两比较,把大的向前移,第一次后,最小的就在最后;第二次循环次小的在次后,如此得到排序。
记录数组:每个元素是自定义类型,从而组成一个数组。在实际应用中常 见
控件数组,同类型控件为元素组成的数组。
创建:1、复制粘贴法 对已有控件复制,然后粘贴,会提示是否创建控件数组,点击是
2、同名法 对多个同类控件,逐一选中,分别设置同一样名字,会提示是否创建控件数组,点击是
以上创建类同于静态数组,在程序运行前创建。
下面是动态创建,即程序运行后才创建控件数组
难点:VB坐标系
一般屏幕以像素为单位,如1024X860,它的单位是像素,坐标原点在屏幕左上角,水平向右为X轴为正,垂直向下为Y轴为正。
同样,VB也是按上面方式用的坐标,但使用的单位默认为缇,缇比像素更小: 1像素=15缇。
这个单位(像素或缇)是可以用户自己来定义的。怎么定义?
scalemode scale就是标尺,刻度的意思,这个就是来设置刻度的模式,有8种。
form1.scalemode=1 '设置为缇为单位(twip)
form1.scalemode=3 '设置为像素为单位(pixel)
其值0时,就是用户定义的刻度,因此要自己定义时须设置为0,同时它还有一功能就是改变坐标系的作用。
自己定义坐标系,有两种方法:
1、scale方法
form1.scalemode=0 ' 第一步须指明下面是用户自定义的坐标
form1.scalemode=3 ' 第二步指明自定义坐标要使用的单位
form1.scale (0,0)-(640,480) ' 第三步指明工作区的大小(左上角到右下角),这样就是一个640X480的工作区
可以看出上面的坐标方向没变,向右X轴为正,向下Y轴为正。再变一下,换成这一句
form1.scale (-320,240)-(320,-240) ' 大小没变仍然是640X480
但方向注意 下,X轴-320到320,由负到正,说明水平向右是正
Y轴240到-240,由正到负,说明垂直向下是负了,即向上才是正。
而且还可以推出,这个坐标的中心就在工作区的中心(可在图上画下)
2、设置scaleleft,scaletop来改变坐标系
object.scalewidth=640 ' 对象工作区水平宽度为640 ,这里只要一设置,scalemode就会自动变成0(用户模式)
object.scaleheight=480 ' 对象的工作区垂直高度为480
object.scaleleft=-320
object.scaletop=240 ' 这样左上角坐标就不是(0,0)了,而是(-320,240)
通过 纵横比: scaleheight / scalewidth 的值可以按比例放大和缩小相关的图形。
Option Base 0 | 1定义数组起点(下界),默认是0,可以用此句强行指定是0还是1
Array(list) 数组函数,由它来构造一个函数。list为元素值的列表 ,注意这些值,能够被variant接收,否则出错
dim a as variant ' 必须是variant,否则出错,原因后述
a=Array(23,33,78,98)
msgBox a(3)
原因:虽然variant与variant数组有区别,但它们的访问方式是一样的,所以可以用variant来替代数组。用其它就会出错,如Integer会出错。
UBound(数组名,维数) 取数组的上界,维数可省,默认为1(第一维),返回值为Long型
LBound(数组名,维数) 。。。。下界,,,,,,,,,,,,,,,,,,,,Long
split( 表达式,分隔符,取元素的限制上界,比较方式) 按照分隔符对表达式进行分割成一个一维的数组,
上界: 限制从表达式中取多少个元素,默认为-1,有多少取多少即全取。可指定,如指定为2,即只取0,1两个元素。
比较方式:有四种,1.vboptioncompare用户特指定
2.vbtextcompare 文本方式 (默认)
3.vbbinarycompare 二进制方式
4.vbaccesscompare Access数据库方式(仅用于Access)