我尝试了一切,但一切都给了我类型不匹配的信息:
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
答案 0 :(得分:2)
VB6“Is Nothing”适用于对象,而不是VB6 arrays。
“Ubound(myarray)”或“Ubound - LBound”是确定VB6中数组当前长度的方法。仅供参考,使用VB6 Collection对您来说可能会更好。
答案 1 :(得分:0)
(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函数替换了我的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,他们真的是极客。