0

我尝试了一切,但一切都让我类型不匹配:

Type UserType
...
End Type

Dim SomeArray() As UserType
...
If SomeArray() Is Nothing Then <do smth>
If SomeArray() Is Empty Then <do smth>
If SomeArray Is Nothing Then <do smth>
If SomeArray Is Empty Then <do smth>

我确实想知道我的用户定义类型数组中什么时候没有元素!因为如果我可以使用 VB6 的可能性,我不想使用额外的变量。

我会用

Erase SomeArray

当它的大小 = 1 ( UBound(SomeArray) = 1) 并且我想删除最后一个元素时。

我做错了什么?XD

4

2 回答 2

2

VB6“什么都没有”适用于对象,而不是VB6 数组

"Ubound(myarray)" 或 "Ubound - LBound" 是在 VB6 中确定数组当前长度的方法。

仅供参考,使用 VB6集合可能对您更好。

于 2016-02-04T19:04:07.450 回答
0

嘿,我从 VBForums "VB6 - Returning/Detecting Empty Arrays" 中找到了解决这个问题的方法。二)

(L/UBound 不适用于空数组 - 它返回超出范围的下标。;))

所以...

Private Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Public Function Peek(ByVal lPtr As Long) As Long
    Call CopyMemory(Peek, ByVal lPtr, 4)
End Function

请记住在定义此子例程之前声明您自己的变量!否则会导致一些奇怪的错误(VB突然用Exit Function替换了我的Exit Sub语句!)。

然后我用

    If Peek(ArrPtr(SomeArray)) = 0 Then
        MsgBox "Looks like empty array SomeArray() before ReDim ^_^"
    End If

    Erase SomeArray

    If Peek(ArrPtr(SomeArray)) = 0 Then
        MsgBox "Looks like empty array SomeArray() after Erase ^_^"
    End If

一切正常!

不是很简单,但很好。

谢谢大家,我将学习这个名为 Collection 的链表。

特别感谢 VBForums,他们真的是极客。

于 2016-02-04T20:05:54.637 回答