2011-05-20 71 views
6

只是想知道如果任何人的方式来实现在VB6类型化可空类型一样NullableOfInteger知道? (我试图避免使用变体)是否有可能实现可空类型一样NullableOfInteger在VB6

您可以轻松地创建自定义类NullableOfInteger并使用其未初始化状态来指示Null状态,但这带有明显的缺点。

除此之外,我真的不能想到任何其他方式?我的直觉告诉我,没有什么好办法。

+0

您可以使用VB.NET吗?或者是“变体”类型? – Juliet 2011-05-20 02:41:06

+0

我对任何新的应用程序都使用C#,但不幸的是我被卡在一堆“传统”VB6代码后面。 – 2011-05-20 02:43:16

回答

7

VB6没有运算符重载或VB.NET中的可空类型使用的自定义隐式转换。你真的无法做到比变体更好。

另一种方法是选择一个特定的值并一致地将该值视为null。在.NET 1.0天中,人们曾使用int.MinValue。我不知道VB6是什么,但我确定有一些东西。这样做的效果并不像听起来那么糟糕(但可为空类型更好)。

+4

我不知道在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

2

我想你回答了你自己的问题;可空是一种方便--.NET有一个实现,VB6没有(主要是因为Variant)。如果你想要一个VB6的类型安全版本,你必须实现它,许多人 - 我记得在数据库API中看到这种事情的普遍地方。

1

只是另一个角度来看

而不是可空您可以通过使用可选

如果你将它定义为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作为他们的默认值。

相关问题