Textbox.text的非空值被读取为空。从字符串“”到类型“ Double”的转换无效

问题描述 投票:0回答:1

我正在尝试构建一个vb .net应用程序,在该应用程序中,我的主要表单中有几个文本框,并且在设计时会用数值填充它们。下图显示了我的表单的摘要:

enter image description here

但是当我构建应用程序时,填充的数值将被读取为空字符串(“”)。这是确切的错误:

An exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll but was not handled in user code

Additional information: Conversion from string "" to type 'Double' is not valid.

以下是汽车窗口的摘要:enter image description here

注意,在“汽车”窗口中,TextBoxWireDiameter的text属性的值为“”。但是我在设计时为text属性增加了价值。我同样填写的其他文本框也会发生相同的错误。知道为什么会这样吗?

这是我的代码:(所有子代码都包含完全相同的代码)

Public Class Form1
Private Sub TextBoxWireLength_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireLength.TextChanged
    Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
    Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
    TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
    TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
    TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
    TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
    TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
    TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub

Private Sub TextBoxWireDiameter_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireDiameter.TextChanged
    Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
    Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
    TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
    TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
    TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
    TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
    TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
    TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub

Private Sub TextBoxWireResistivity_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireResistivity.TextChanged
    Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
    Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
    TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
    TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
    TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
    TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
    TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
    TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub

Private Sub TextBoxWireVoltage_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireVoltage.TextChanged
    Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
    Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
    TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
    TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
    TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
    TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
    TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
    TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub

Private Sub TextBoxWireCurrentDuration_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireCurrentDuration.TextChanged
    Dim WireArea As Double = Math.PI * (TextBoxWireDiameter.Text / 1000) * (TextBoxWireDiameter.Text / 1000) / 4
    Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
    TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
    TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
    TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
    TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
    TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
    TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
End Sub
End Class

这是我尝试解决的问题:

  1. 重建几次。 ->没用。
  2. 用val(),Cbdl()和TryParse()包围textbox.text代码。 ->没有任何效果。
  3. 将值分配给Form1.load事件中的文本框。 ->没用。
vb.net visual-studio build textbox
1个回答
0
投票

啊,该死!我很轻松地解决了您的问题。只需在所有Try Catch事件中使用TextChange。例如:

Private Sub TextBoxWireCurrentDuration_TextChanged(sender As Object, e As EventArgs) Handles TextBoxWireCurrentDuration.TextChanged
    Try
        Dim WireArea As Double = Math.PI * Val((TextBoxWireDiameter.Text / 1000)) * Val((TextBoxWireDiameter.Text / 1000)) / 4
        Dim WireMass As Double = 8400 * WireArea * (TextBoxWireLength.Text / 1000)
        TextBoxWireResistance.Text = ((TextBoxWireResistivity.Text * (TextBoxWireLength.Text / 1000)) / WireArea)
        TextBoxWireCurrent.Text = TextBoxWireVoltage.Text / TextBoxWireResistance.Text
        TextBoxWirePower.Text = TextBoxWireVoltage.Text * TextBoxWireCurrent.Text
        TextBoxWireHeat.Text = TextBoxWirePower.Text * TextBoxWireCurrentDuration.Text * 60
        TextBoxWireTemperatureRise.Text = TextBoxWireHeat.Text / (WireMass * 450)
        TextBoxWireTemperature.Text = TextBoxWireTemperatureRise.Text + 22
    Catch ex As Exception

    End Try
End Sub

冷静的人。现在运行正常。

Easy Solution

© www.soinside.com 2019 - 2024. All rights reserved.