vb6备忘录(4) 数组

数组是内存中连续存放的一组元素。分静态(定长)和动态(变长)数组。

动态数组是在程序运行中可以改变长度的一组元素。


静态数组:

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

动态数组中插入或删除一个数组:

插入:    先增加长度,其后值向后移动,插入点写入值

删除:    先向删除点移动数据,最后Redim减少长度



选择排序法:从第一始,与后面所有元素比较,判断大(小)则向前移;第二次从第二始,再与后面所有元素比较,如此得到排列。

冒泡法:        共循环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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值