只是想知道如果任何人的方式來實現在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