Vb.net 当Textbox为空时调试时应用程序崩溃

Vb.net 当Textbox为空时调试时应用程序崩溃,vb.net,Vb.net,我想创建一个文本框,当键入的值大于一个数字时,文本的颜色会从黑色动态地变为红色,反之亦然。我成功地做到了这一点,但当我删除文本框的所有内容时,我的调试应用程序崩溃,出现错误System.InvalidCastException:“从字符串到类型'Double'的转换无效。”下面是我使用的代码: Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged If

我想创建一个文本框,当键入的值大于一个数字时,文本的颜色会从黑色动态地变为红色,反之亦然。我成功地做到了这一点,但当我删除文本框的所有内容时,我的调试应用程序崩溃,出现错误System.InvalidCastException:“从字符串到类型'Double'的转换无效。”下面是我使用的代码:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    If CDbl(TextBox1.Text) > CDbl(Label2.Text) Then
        TextBox1.ForeColor = Color.Red
    End If
    If CDbl(TextBox1.Text) = CDbl(Label2.Text) Then
        TextBox1.ForeColor = Color.Black
    End If
    If CDbl(TextBox1.Text) < CDbl(Label2.Text) Then
        TextBox1.ForeColor = Color.Black
    End If
    If TextBox1.Text = "" Then
        TextBox1.ForeColor = Color.Black
    End If
End Sub

为了防止应用程序崩溃,我必须添加哪些功能?提前谢谢。致以最诚挚的问候。

您的代码存在多个可能需要注意的问题

如果转换失败,VB转换函数(如CInt、CDbl等)将抛出异常。空值不代表数值,因此将失败。解决方案可能是首先检查空字符串值

您可能还想使用If。。。如果。。。如果。。。如果。。。EndIf构造,以避免在执行匹配的if块后执行后续if块

但是如果你输入一个非数值,比如

因此,我建议在这里使用CDbl而不是CDbl

还请注意,您通常希望使用黑色作为默认前景色,但仅当文本框的值大于标签的值时才希望切换为红色。为什么不直接用代码来表达呢

这是我的两分钱,使用一个变量NewForeColor,最初设置为Color.Black。然后,仅当文本框和标签都包含数值且文本框值大于标签值时,才会将其设置为Color.Red。最终,文本框的前景色设置为NewForeColor变量的值:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    Dim NewForeColor As Color = Color.Black
    Dim TextBox1Value As Double
    Dim Label2Value As Double

    If Double.TryParse(TextBox1.Text, TextBox1Value) AndAlso Double.TryParse(Label2.Text, Label2Value) Then
        If TextBox1Value > Label2Value Then
            NewForeColor = Color.Red
        End If
    End If

    TextBox1.ForeColor = NewForeColor
End Sub

好吧,为了开始,把最后一个If移到开头,把剩下的If移到ElseIf。