在VB中如何动态地添加,删除数组?

abiaozsh 2003-12-03 05:47:28
在VB中如何动态地添加,删除数组?
...全文
1027 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2003-12-03
  • 打赏
  • 举报
回复
做什么用?
abiaozsh 2003-12-03
  • 打赏
  • 举报
回复
我不是要动态数组,而是动态地添加/删除"整个"数组.
踏平扶桑 2003-12-03
  • 打赏
  • 举报
回复
动态数组


数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。

动态数组就可以在任何时候改变大小。在 Visual Basic 中,动态数组最灵活、最方便,有助于有效管理内存。例如,可短时间使用一个大数组,然后,在不使用这个数组时,将内存空间释放给系统。

如果不用动态数组,就要声明一个数组,它的大小尽可能达到最大,然后再抹去那些不必要的元素。但是,如果过度使用这种方法,会导致内存的操作环境变慢。

要创建动态数组,请按照以下步骤执行:

(如果希望数组为公用数组,则)用 Public 语句声明数组,或者,(如果希望数组为模块级,则)在模块级用 Dim 语句声明数组,或者(如果希望数组为局部数组,则)在过程中用 Static 或 Dim 语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。
Dim DynArray ()

用 ReDim 语句分配实际的元素个数。
ReDim DynArray (X + 1)

ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。

ReDim 语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个 ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。

ReDim DynArray (4 to 12)

例如,用第一次声明在模块级所建立的动态数组 Matrix1:

Dim Matrix1 () As Integer

然后,在过程中给数组分配空间:

Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub

这里的 ReDim 语句给 Matrix 分配一个 20 × 30 的整数矩阵(元素总大小为 600)。还有一个办法,用变量设置动态数组的边界:

ReDim Matrix1 (X, Y)

注意 您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。

保留动态数组的内容
每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。

在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:

ReDim Preserve DynArray (UBound (DynArray) + 1)

在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。所以可这样编程:

ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)

而不可这样编程:

ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)

详细信息 关于动态数组的更详细信息,请参阅语言参考中的“ReDim 函数”。关于对象数组,请参阅“用对象编程”。









Erase 语句



重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。

语法

Erase arraylist

所需的 arraylist 参数是一个或多个用逗号隔开的需要清除的数组变量。

说明

Erase 根据是固定大小(常规的)数组还是动态数组,来采取完全不同的行为。Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:

数组类型 Erase 对固定数组元素的影响
固定数值数组 将每个元素设为 0。
固定字符串数组(长度可变) 将每个元素设为零长度字符串 ("")。
固定字符串数组(长度固定) 将每个元素设为 0。
固定 Variant 数组 将每个元素设为 Empty。
用户定义类型的数组 将每个元素作为单独的变量来设置。
对象数组 将每个元素设为特定值 Nothing。


Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。
FSoft 2003-12-03
  • 打赏
  • 举报
回复
在Redim 语句中加入Preserve关键字可以动态增减数组最后一维的维数
longki 2003-12-03
  • 打赏
  • 举报
回复

在MSDN中看一下楼上所说的,里面都有Example!
xayzmb 2003-12-03
  • 打赏
  • 举报
回复
redim
Erase
VB程序设计综合复习题 1、叙述Visual Basic的特点。 2、当窗体上有三个文本框和一个命令按钮,若程序运行时,焦点定位在第三个文本框(Text3)处,应对何控件的什么属性进行何种设置? 3、若要对窗体上的三个文本框输入数据,个控件焦点的移动可通过Tab键(系统本身具有的),也可通过回车键,则要对文本框的什么事件编程? 4、当某文本框输入数据后(按了回车键),进行判断认为数据输入错,怎样删除原来数据?怎样使焦点回到文本框重新输入? 5、怎样把关于Command命令按钮的Enabled属性的帮助示例代码复制到你的代码窗口?已知帮助的代码如下: Private Sub Form_Load() Text1.Text = ”” ‘消除文本框的内容 Command1.Caption = “Save” ‘在按钮上放置标题 End Sub Private Sub Text1_Change() If Text1.Text = “” Then ‘查看文本框是否为空 Command1.Enabled = False ‘使按钮无效 Else Command1.Enabled = True ‘使按钮有效 End If End Sub 6、当运行程序前,对某些控件设置属性值,除了在窗体直接设置外,还可以通过代码设置,这些代码一般放在什么事件?例如,程序要将命令按钮定位在窗体的央,请写出事件过程。 7、在KeyPress事件,如何取消用户刚键入的字符? 8、静态数组动态数组的区别是什么?在声明静态数组、重定义动态数组时的下标都可以用变量来表示吗? 9、函数过程和子过程的区别是什么? 10、子过程调用有哪两种形式? 11、什么是形参?什么是实参?什么是值引用?什么地址引用?地址引用时,对应的实参有没有限制? 12、如果要时钟控件每半分钟发生一个Timer事件,则Interval属性应设置为多少? 13、如果在KeyDown事件过程将KeyCode设置为0,KeyPress的KeyAscii参数会不会受影响?如果输入的对象是文本框,那文本框的内容是否有影响? 14、构造满足下列条件的Open语句。 (1)建立一个新的顺序文件SEQNEW.DAT,供用户写入数据,指定文件号为1。 (2)打开一个老的顺序文件SEQOLD.DAT,用户将从该文件读出数据,指定文件号为2。 (3)打开一个老的顺序文件SEQAPPEND.DAT,用户将在该文件后面添加数据,文件号通过调用FreeFile函数获得。 15、请写出程序代码片段,将磁盘上的两个文件合并。(提示:把它们作为二进制文件打开) 16、PictureBox控件和Image控件有什么区别? 17、Visual Basic可处理哪些格式的图形文件? 18、在程序运行时怎样在图形(像)框装入或删除图形? 19、简述Printer对象与Printers集合对象的区别。 20、当要在ToolBar控件添加一个按钮,如何实现? 21、当要修改ToolBar控件某按钮的图像,如何实现? 22、Visual Basic记录集有几种类型?有

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧