只是想知道如果任何人的方式来实现在VB6类型化可空类型一样NullableOfInteger知道? (我试图避免使用变体)是否有可能实现可空类型一样NullableOfInteger在VB6
您可以轻松地创建自定义类NullableOfInteger并使用其未初始化状态来指示Null状态,但这带有明显的缺点。
除此之外,我真的不能想到任何其他方式?我的直觉告诉我,没有什么好办法。
只是想知道如果任何人的方式来实现在VB6类型化可空类型一样NullableOfInteger知道? (我试图避免使用变体)是否有可能实现可空类型一样NullableOfInteger在VB6
您可以轻松地创建自定义类NullableOfInteger并使用其未初始化状态来指示Null状态,但这带有明显的缺点。
除此之外,我真的不能想到任何其他方式?我的直觉告诉我,没有什么好办法。
VB6没有运算符重载或VB.NET中的可空类型使用的自定义隐式转换。你真的无法做到比变体更好。
另一种方法是选择一个特定的值并一致地将该值视为null。在.NET 1.0天中,人们曾使用int.MinValue
。我不知道VB6是什么,但我确定有一些东西。这样做的效果并不像听起来那么糟糕(但可为空类型更好)。
我不知道在VB6预定不变的,但你可以随时使用'常量MININT32只要= H80000000','常量MAXINT32只要= H7FFFFFFF','常量MININT16作为整数= H8000','常量MAXINT16作为整数=&H7FFF','Const MININT8 As Byte = 0'和'Const MAXINT8 As Byte =&HFF'。注意:VB6中的“Long”是一个32位整数。 Integer是一个16位整数。 'Byte'是一个无符号的8位整数。 – pickypg 2011-05-20 03:18:37
我想你回答了你自己的问题;可空是一种方便--.NET有一个实现,VB6没有(主要是因为Variant)。如果你想要一个VB6的类型安全版本,你必须实现它,许多人 - 我记得在数据库API中看到这种事情的普遍地方。
只是另一个角度来看
而不是可空您可以通过使用可选
如果你将它定义为Optional BLABLA As Integer
它将有一个默认0
值处理此所以如果null或空ü将有一个默认值0
..
下面是我为我自己做出了表率!它可能会派上用场:
用法:
ProgressInc ProgressBar1 'you can add other options if you want as shown below
'ProgressInc ProgressBar1, 500, 50, 25, True
'I always change Min value to 1 in my ProgressInc so if you even choose it as 0 it still gonna be 1
也以这种方式工作
Dim TheThing As Long
ProgressInc ProgressBar1 ,TheThing
'See no definition about TheThing except being Long type
'cause of this its value is 0
子:
Public Sub ProgressInc(ProgressBarName As ProgressBar, Optional Max As Long, Optional Min As Long, Optional Inc As Long, Optional Continues As Boolean = False)
Dim Recent As Long
On Err GoTo ProgressBarErr
ProgressBarName.ShowWhatsThis
DoEvents
'Maximum ProgressBar Value
If Max <> 0 Then
ProgressBarName.Max = Max
Else
Max = 100
ProgressBarName.Max = Max
End If
'Minimum ProgressBar Value
If Min <> 0 Then
ProgressBarName.Min = Min
Else
Min = 1
ProgressBarName.Min = Min
End If
If Inc <> 0 Then Inc = Inc Else Inc = 1
'When the ProgressBar value is at Maximum
'Return to the Minimum value
If Continues = True And ProgressBarName.Value = Max Then
ProgressBarName.Value = Min
End If
'Checkout Recent progress (pre calculate bar value)
Recent = ProgressBarName.Value + Inc
If Recent >= Max Then
'Recent value is higher than or equals to Max value
'to avoid errors caused by this issue Value should equal to Max
ProgressBarName.Value = Max
ElseIf Recent < Max Then
'Recent(pre calculated bar value) is lower than Max
'So nothing wrong here, proceed..
ProgressBarName.Value = ProgressBarName.Value + Inc
End If
Exit Sub
ProgressBarErr:
'ProgressBar error report.
MsgBox "With " & Err.Number & " number : '" & Err.Description & "' error occured. "
End Sub
看到那里即时得到敏,Max,Inc As Long当我没有定义他们时,他们的0
作为他们的默认值。
您可以使用VB.NET吗?或者是“变体”类型? – Juliet 2011-05-20 02:41:06
我对任何新的应用程序都使用C#,但不幸的是我被卡在一堆“传统”VB6代码后面。 – 2011-05-20 02:43:16