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