从字符串“”到“ Double”的转换无效。 VB表格

时间:2018-10-19 18:17:50

标签: vb.net

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    If STRPoints.Value >= 10 Then
        STRScorelbl.Text = STRScorelbl.Text + (STRPoints.Value Mod 10)
    ElseIf STRPoints.Value < 10 Then
        STRScorelbl.Text = STRScorelbl.Text - (10 - STRPoints.Value)
    End If
End Sub

该代码应该在屏幕上显示一个数字作为标签,该数字受2种不同因素的影响。首先是一个单选按钮,将其添加+2,另一个是UpDownNumeric框,将其值(Mod 10)添加到基数(偶然也为10)。

错误是:

  

System.InvalidCastException:'从字符串“”转换为'Double'类型的转换无效。'

我已经阅读了该错误,但是即使以大约100种不同的方式进行转换后,我似乎也无法修复该错误。追溯感谢任何可以帮助和解释我做错事情的人。

2 个答案:

答案 0 :(得分:4)

STRScorelbl.Text为空。因此,当您有以下代码时:

STRScorelbl.Text = STRScorelbl.Text +

在我们甚至不知道该操作员另一端的情况之前,您已经遇到麻烦了。无论您如何尝试强制转换或转换空字符串,都将卡住。

如果您像任何一个好的项目一样都转过Option Strict On,则此错误将更容易发现,因为编译器会向您抱怨并在Visual Studio编辑器中强调了该错误。严格禁用选项是非常糟糕的做法。

打开Option Strict并修复此更改产生的任何其他有用的编译器错误之后,您可以按以下步骤对其进行修复:

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    Dim OriginalValue As Double = 0.0
    If Not String.IsNullOrWhitespace(STRScorelbl.Text) Then OriginalValue = Double.Parse(STRScorelbl.Text)

    If STRPoints.Value >= 10 Then
        OriginalValue += (STRPoints.Value Mod 10)
    Else
        OriginalValue -= (STRPoints.Value Mod 10)
    End If
    STRScorelbl.Text = OriginalValue.ToString()
End Sub

除此之外,我不会使用标签控件(即文本)作为数字数据的权威存储。相反,我会有这样的属性:

Private _Score As Double = 0.0
Public Property Score As Double
    Get
       Return _Score
    End Get
    Set
       _Score = value
       STRScorelbl.Text = _Score.ToString()
    End Set
End Property

然后,您可以简化ValueChanged()方法:

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    If STRPoints.Value >= 10 Then
        Score += (STRPoints.Value Mod 10)
    Else
        Score -= (STRPoints.Value Mod 10)
    End If
End Sub

答案 1 :(得分:1)

尝试使用val()函数,例如:

DateTime