所以这里是我练习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,我相信我需要实例化我的对象引用?但是如何?
答案 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