查看: 487  |  回复: 0
  VB6 给你的数组动态扩容, 函数 ReDim Preserve intArray(3),如何扩容二维数组才不出错。
楼主
发表于 2023年11月27日 14:30

新建From1(窗体),新建Command1(按钮CommandButton),代码:

具体代码只能由VIP查看,请升级

运行结果:

具体代码只能由VIP查看,请升级

对于二维数组扩容就会发生问题:运行时错误9:下标超出范围。

原因和解决办法:

ReDim Preserve只能是数组的最后一个维度(MSDN上的ReDim语句):

如果使用"保留"关键字,则只能调整最后一个数组维度的大小,并且根本无法更改维度数。例如,如果您的数组只有一个维度,则可以调整该维度的大小,因为它是最后一个维度。但是,如果阵列具有两个或更多维度,则可以仅更改最后一个维度的大小,并仍保留阵列的内容。

因此,要确定的第一个问题是二维数组是否是作业的最佳数据结构.也许,1维阵列更适合您需要做的事情ReDim Preserve?

另一种方法是根据Pieter Geerkens的建议使用锯齿状阵列.在VB6中没有直接支持锯齿状数组.在VB6中编写"数组数组"的一种方法是声明一个数组,Variant并使每个元素成为所需类型的数组(String在您的情况下)。演示代码如下。

另一种选择是自己实现Preserve部分.为此,您需要创建要保留的数据副本,然后使用它填充redimensioned数组。

具体代码只能由VIP查看,请升级

运行结果:

Original array:
0; 1; 2; 3; 
4; 5; 6; 7; 
8; 9; 10; 11; 
Resized array:
0; 1; 2; 3; ; 
4; 5; 6; 7; ; 
8; 9; 10; 11; ; 
; ; ; ; ;


1楼
发表于 2023年12月1日 13:59

此二维数组好像每次只能扩容1,多了就出错。

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com