2017-04-20 1 views
-1

그래서 여기에 간단한 개념의 WPF 애플리케이션이 있습니다. 사용자가 피트 단위로 숫자를 입력하고 메시지 상자를 출력하여 미터로 변환합니다.VB 텍스트 상자의 WPF 'System.NullReferenceException'

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 

그리고 내 다른 클래스 파일 :

<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" 
    /> 

내가 어둡게 lengthInMeters = txtBox1.Text "에서 NullReference을 얻고있다 : 또한

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

, 여기에 텍스트 상자에 대한 XAML입니다 "나는 내 객체 참조를 인스턴스화해야한다고 믿는다. 그러나 어떻게?

  • 도움 주셔서 감사합니다.
+2

'txtBox1'이 null입니다. 그 코드가 완전히 왜곡 되었습니까, 아니면 정말로 필드를 초기화하려고합니까? –

+1

언제'txtBox1.Text'를 숫자로 변환하고 싶습니까? –

+2

WPF 인 경우 컨트롤을 속성에 바인딩해야합니다. – Filburt

답변

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 
관련 문제