VB检查结构体的值

3

我有两个结构,有时一个会被用户填充数据,有时两个都会填充。 我需要检查整个结构是否已输入数据。 如果可以甚至只检查变量是否为空或null (下面的示例所做的)。 当代码运行时,无论结构是否有数据,btnTurn.Enabled总是禁用的。这可能与我的布尔值有关吗?

结构体

 Public Structure StructSurvData
            Friend szTBMNum As String
            Friend dblTBMElev1 As Double
            Friend dblTBMElev2 As Double
            Friend dblTBMElev3 As Double
            Friend dblBACKSIGHT1 As Double
            Friend dblBACKSIGHT2 As Double
            Friend dblBACKSIGHT3 As Double
            Friend dblFORESIGHT1 As Double
            Friend dblFORESIGHT2 As Double
            Friend dblFORESIGHT3 As Double
            Friend szNewMPEDescr As String
            Friend szDataComm As String

        End Structure

        Public Structure StructSurvData2
            Friend szTBMNum2 As String
            Friend dblTBMElev4 As Double
            Friend dblTBMElev5 As Double
            Friend dblTBMElev6 As Double
            Friend dblBACKSIGHT4 As Double
            Friend dblBACKSIGHT5 As Double
            Friend dblBACKSIGHT6 As Double
            Friend dblFORESIGHT4 As Double
            Friend dblFORESIGHT5 As Double
            Friend dblFORESIGHT6 As Double
            Friend szNewMPEDescr2 As String
            Friend szDataComm2 As String
        End Structure

如果/否则

 If structSD2.szTBMNum2 = Nothing Then
                btnTurn.Enabled = False
            ElseIf structSD2.szTBMNum2 <> Nothing Then
                btnTurn.Enabled = True
            End If

对于字符串,您应该使用其中之一的函数来检测是否为空或为null。这完全取决于您所说的“具有值”的含义。最好的方法是编写一个返回true或false的函数。 - the_lotus
旁注:你确定这些应该被定义为结构体吗?它们非常大。在这里使用普通类可能更好。而且你对friend的使用也值得怀疑。 - sstan
@sstan 这段代码是为了一个多年前构建的应用程序而编写的。相信我,我不想使用结构体,但如果不进行大量重新编码以满足客户要求(与数据存储方式无关),那么这样做会更容易些。 - I'm here for Winter Hats
2个回答

5

在IT技术中,应该始终使用is nothing代替=nothing,并使用isnot nothing代替<> nothing

        If structSD2.szTBMNum2 is Nothing Then
            btnTurn.Enabled = False
        ElseIf structSD2.szTBMNum2 isnot Nothing Then
            btnTurn.Enabled = True
        End If

甚至更好的方法是如 @zaggler 建议的:

        btnTurn.Enabled = structSD2.szTBMNum2 Is Nothing

3
btnTurn.Enabled = structSD2.szTBMNum2 Is Nothing 可以简单理解为“如果structSD2.szTBMNum2为空,则启用btnTurn按钮”(其中“=”表示等于,“Is Nothing”表示为空)。 - Trevor
2
是的,请不要编写这样的代码——它是一种反模式。 - Konrad Rudolph
1
是的,同意 - 这样做更容易让原帖作者看到变化。 - FloatingKiwi
1
@Zaggler 因为这是代码膨胀:它比您建议的语句长五倍,而且没有任何益处来抵消这一点,无论是在可读性还是性能方面。因此,它会对代码的可读性产生负面影响,因为它会将注意力从关键部分转移开。 - Konrad Rudolph
1
@Zaggler 我同意你的观点,你在评论中提出的代码更优秀。 - Konrad Rudolph
显示剩余3条评论

1
If structSD2.szTBMNNum Is Nothing Then

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接