VB文本框中的WPF'System.NullReferenceException'

时间:2017-04-20 19:21:59

标签: wpf vb.net

所以这里是我练习OO概念的简单WPF应用程序。用户输入一个以英尺为单位的数字,并通过输出一个消息框转换为米。

Class MainWindow

Dim lengthInMeters = txtBox1.Text '***An exception of type "System.NullReferenceException" occurred***

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    MessageBox.Show(COptions.GetLength(lengthInMeters), "Conversion Successful!", MessageBoxButton.OK)
End Sub
End Class

我的其他课程文件:

Public Class COptions
Public Shared Function GetLength(lengthInMeters) As Double
    Return lengthInMeters / 3.28
End Function
End Class

此外,这是文本框的XAML:

<TextBox 
    x:Name="txtBox1" 
    x:FieldModifier="public" 
    HorizontalAlignment="Left" 
    Height="23" 
    Margin="200,140,0,0" 
    TextWrapping="Wrap" 
    VerticalAlignment="Top" 
    Width="120" 
    enderTransformOrigin="1.29,-3.252" 
    Grid.Column="1"
    />

我在“Dim lengthInMeters = txtBox1.Text”获得NullReference,我相信我需要实例化我的对象引用?但是如何?

  • 感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在构造函数运行之前初始化字段,并在构造函数中初始化GUI组件,因此在您使用它时,txtBox1尚未初始化,如您所知。即使它确实有效,它也会在该点捕获文本框的值,这是在用户有机会输入任何内容之前。

相反,将Dim lengthInMeters = txtBox1.Text行移动到按钮单击处理程序中,以便在使用之前获取文本框的当前值。您当前的代码也依赖于某些隐式类型转换 - 我建议您使用Option Strict On来捕获这些转换,并使用显式转换。

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click
    Dim lengthInMeters = CDbl(txtBox1.Text)
    MessageBox.Show(COptions.GetLength(lengthInMeters), "Conversion Successful!", MessageBoxButton.OK)
End Sub

Public Class COptions
    Public Shared Function GetLength(lengthInMeters As Double) As Double
        Return lengthInMeters / 3.28
    End Function
End Class