2016-03-31 5 views
-3

ifステートメントをステップ実行しようとしているところで次のコーディングがありますが、ラベルの内容を0に設定することに問題があります。ラベルの内容をゼロに設定できません

private void UnderRunBumper() 
{ 
    lblGVMAmount.Content = 0; //Issue here 
    if (Convert.ToInt32(txtExternalLength.Text) >= 6000) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 

    else if (Convert.ToInt32(lblGVMAmount.Content.ToString()) >= 8000) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 

    else if (cmbBodyType.SelectedIndex == 6 || cmbBodyType.SelectedIndex == 7 || cmbBodyType.SelectedIndex == 8 || cmbBodyType.SelectedIndex == 9 || cmbBodyType.SelectedIndex == 10) 
     lblUnderRunBumper.Content = "Under-Run Bumper"; 
    else lblUnderRunBumper.Content = ""; 
} 

私はエラーを取得する:

Object reference not set to an instance of an object.

私は理解していません。ラベルの値を0に設定できないのはなぜですか?

+0

は、なぜあなたは(http://stackoverflow.com/questions/36337084/setting-label-content-causes-issues) – MethodMan

+0

を[6時間前から同じ質問]を投稿しているあなたがしようとすると、lblGVMAmountヌルですContentプロパティを0に設定しますか? –

+0

@ MADsc13nceはいそれはです:) – CareTaker22

答えて

1

WPFアプリケーション(またはwinforms)では、UserControlまたはWindow自体が、InitializeComponentという呼び出しを使用してビルドされます。これはコードビハインドのコンストラクタに自動的に追加されます。

この呼び出しは、ビューを初期化し、そのオブジェクトをインスタンス化します。このメソッドが完了する前にUIコントロールに触れないでください。

など。

public partial class MyView : UserControl 
{ 
    public MyView() 
    { 
     var x = myButton; //<Button Name="myButton" /> in xaml 
          // x is null 

     InitializeComponent(); 

     x = myButton; //x is valid 

    } 
} 
+0

答えと説明をありがとう! :D私は問題を見つけましたが、なぜそれが起こるかわかりません。テキストボックスのTextChangedイベントで私の 'UnderRunBumper()'メソッドを使用しています。何らかの理由でクラッシュする原因になります – CareTaker22

+1

ラベルがインスタンス化される前に、テキストが 'InitializeComponent'の呼び出し中に変更されることがあります。ちょうど投機。あなたのコールスタックをチェックすると、あなたは知っているでしょう。これは、貴重なデバッグスキルを習得する良い機会です。 – Jonesopolis

+0

あなたはまったく正しいと思います。それは私にとって理にかなっている唯一の説明です。しかし、ここでコメントした覗き込みのように、助けと否定的ではないことに感謝します。 – CareTaker22

関連する問題