尝试将值从文本框赋值给变量时出现null异常

时间:2017-07-01 18:25:45

标签: c#

请原谅,我很欣赏这有点基本。

XAML.CS

Double D;
D = Convert.ToInt32(Diameter.Text);
D = int.Parse(Diameter.Text);

Double R;
R = (D / 2);

Double A;
A = (R * R * (Math.PI));

Double M;
M = Convert.ToInt32(Mass.Text);
M = int.Parse(Mass.Text);

float g;
g = 9.81f;

float P;
P = Convert.ToInt32(Pressure.Text);
P = int.Parse(Pressure.Text);

float Ol1;
Ol1 = Convert.ToInt32(OilLevel.Text);
Ol1 = int.Parse(OilLevel.Text);

Double V1;
V1 = ((Math.PI) * R * R * Ol1);

float K1;
K1 = Convert.ToInt32(SpringRate.Text);
K1 = int.Parse(SpringRate.Text);

Double Pr1;
Pr1 = Convert.ToInt32(InitialPreload.Text);
Pr1 = Convert.ToInt32(Preload.Text);
Pr1 = (Convert.ToInt32(InitialPreload.Text) + Convert.ToInt32(Preload.Text));

InitializeComponent();

第二行(D = Convert.ToInt32(Diameter.Text))抛出错误。

下面是保存文本框

的xaml代码

XAML

<StackPanel>
    <TextBlock Margin = "10 10" Text="Spring Force Calculator" HorizontalAlignment="Center" FontWeight="Bold" FontSize="22"/>
    <TextBlock Margin = "10 10" Text="Mass - Kg" FontSize="18"/>

    <TextBox x:Name="Mass" Margin="10 10" Text="165"/>
    <TextBlock Margin = "10 10" Text="Initial Pressure - Bar" FontSize="18"/>

    <TextBox x:Name="Pressure" Margin="10 10" Text="1"/>
    <TextBlock Margin = "10 10" Text="Internal Fork Diameter - mm" FontSize="18"/>

    <TextBox x:Name="Diameter" Margin="10 10" Text="46"/>
    <TextBlock Margin = "10 10" Text="Internal Fork Area - mm²" FontSize="18"/>

    <TextBox x:Name="Area" Margin="10 10"/>
    <TextBlock Margin = "10 10" Text="Spring Rate - N/m" FontSize="18"/>

    <TextBox x:Name="SpringRate" Margin="10 10" Text="9"/>
    <TextBlock Margin = "10 10" Text="Installed Preload - mm" FontSize="18"/>

    <TextBox x:Name="InitialPreload" Margin="10 10" Text="10"/>
    <TextBlock Margin = "10 10" Text="Preload - mm" FontSize="18"/>

    <TextBox x:Name="Preload" Margin="10 10" Text="6"/>
    <TextBlock Margin = "10 10" Text="Oil Level - mm" FontSize="18"/>

    <TextBox x:Name="OilLevel" Margin="10 10" Text=".133"/>
    <TextBlock Margin = "10 10" Text="Maximum Allowable Travel - mm" FontSize="18"/>

    <TextBox x:Name="MaxATravel" Margin="10 10" Text="115"/>
    <TextBlock Margin = "10 10" Text="Maximum Calculated Travel - mm" FontSize="18"/>

    <TextBox x:Name="MaxCTravel" Margin="10 10"/>
</StackPanel>

我知道我必须遗漏一些基本的东西,而且对训练有素的眼睛来说相当明显。我应该注意到,这是我第一次尝试编程并尝试学习(也许不是最好的主意)。

对于初学者问题再次抱歉,请帮忙!

由于 JORD

1 个答案:

答案 0 :(得分:1)

问题是您的组件尚未初始化,并且在初始化之前访问驻留在此组件中的控件。解决方案是引入这一行:

InitializeComponent();

作为MainWindow方法的第一行。作为旁注,正如我已经做过的那样,我认为您没有理由同时使用Convert.ToInt32Int.Parse。解析应该只进行一次。此外,我建议您查找int.TryParse方法,因为这样可以避免在解析过程中出现任何异常。您可以从here开始。