VBGood网站全文搜索 Google

首页 - 经验之谈 - 动态改变数组的上限
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:11618, 日期:2001-02-27
A tip for determining the size of a VB dynamic array

Dynamic arrays are great tools for creating a collection of values
on the fly. However, you may have run into trouble when trying to
determine if the array contains any items. The UBound() function
provides one way to tell if it does. However, if the array doesn注释:t
officially exist yet--that is, you haven注释:t redimensioned it with
even a single item--then this function generates an error.

To accommodate this problem, some people suggest automatically
redimensioning the array with its first item, for instance:

ReDim strCats(0)

However, why have Visual Basic create the array if it potentially may
not use it? Another often-suggested alternative is to use a counter
variable; something along the lines of:

MyUpper = 0

Sub AddValue(strValue as String)
ReDim Preserve strCats(MyUpper)
strCats(MyUpper) = strValue
MyUpper = MyUpper + 1
End Sub

While this method works, the counter technique can get messy in large
applications; not to mention redundant. After all, Visual Basic already
keeps track of the current upper boundary, so it注释:s much more efficient
to let it do the job for you.

As a more efficient method, try simply trapping for the error that the
UBound() function throws when the array doesn注释:t contain any items
(Error 9, subscript out of range), as in:

Private Function GetUpper(varArray As Variant) As Integer
Dim Upper As Integer
On Error Resume Next
Upper = UBound(varArray)
If Err.Number Then
     If Err.Number = 9 Then
          Upper = 0
          With Err
               MsgBox "Error:" & .Number & "-" & .Description
          End With
          Exit Function
     End If
     Upper = UBound(varArray) + 1
End If
On Error GoTo 0
GetUpper = Upper
End Function