2011-05-20 69 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作爲他們的默認值。

相關問題