2009-05-14 8 views
3

プログラムを実行すると、NullReferenceExceptionが処理されませんでした。オブジェクト参照がオブジェクトのインスタンスに設定されていません。NullReferenceExceptionが処理されていませんでした。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私がプログラムを起動すると、最大スコアを入力してOKを押すMaxScoreと呼ばれるフォームが表示されます。 OKイベントでは、MainFormのメソッドを呼び出して、MainFormのmaxGameCountLabelを、最大スコアに入力された値でパラメータとして更新します。

私は[OK]を押すと、私は私のmaxGameCountLblUpdate方法の

myGameCountLbl.Text = maxGames.ToString(); 

でとNullReferenceExceptionを取得します。ここで

はMainFormを内に存在maxGameCountLblUpdateメソッドコードである:ここで

//Update game count label 
public void maxGameCountLblUpdate(decimal maxGames) 
{ 
    maxGames = decimal.ToInt32(maxGames); 
    myGameCountLbl.Text = maxGames.ToString(); 
    compGameCountLbl.Text = maxGames.ToString(); 
} 

がMaxScoreの私のOKボタンのイベントです:

private void okBtn_Click(object sender, EventArgs e) 
{ 
    MainForm.maxGameCountLblUpdate(max); 
} 

注、私は

public Form1 MainForm { get; set; } 

を設定していますMaxScoreで

そして、私はとのMainFormにMaxScoreを作成するには:

using (MaxScore scoreForm = new MaxScore()) 
    { 
     scoreForm.MainForm = this; 
     scoreForm.ShowDialog(); 
    } 

私は、これは..私は試してみました多くのもの... 感謝を動作させることはできません!

EDIT:myGameCountLbl.Text = maxGames.ToString();でブレークポイントを追加した後。 myGameCountLblがヌルとして登場しているようです...私はnewbのために申し訳ありません...どうすればこの問題を解決できますか?これが問題を引き起こしているラインである場合には、まあ問題

+0

エリックの支援を期待myGameCounLbl

にNULL値を割り当てないことを確認します

if (maxGames!=null){ myGameCountLbl.Text = maxGames.ToString(); } 

は:値が割り当てられるかどうかをチェックするためにIF文を使用すると、似nullではありませんInitializeComponent()の前にコンストラクタのmaxGameCountLblUpdate?あなたの質問はokBtn_Clickイベントから呼び出されたように見えるので、混乱があったと思います。コールスタックからそれを理解することができます。コールスタックは、便利なデバッグツールの1つです。 – dmo

答えて

2

は、あなたが削除しました:コンストラクタからInitializeComponent();

デザイナを使用してフォームUIを構築する場合、Visual Studioは、コントロールを初期化するために、背景(Class.designer.cs)にメソッドを作成します。 UI要素にアクセスする前にInitializeComponent()に電話しないと、NullReferenceExceptionが発生します。

+0

うわー!他のすべてのコードの後に​​InitializeComponent()がありました...ああ!大変ありがとうございました。頂上に戻してくれました! – Eric

+0

私は初期の記述のようには聞こえませんが、その場合はフォームの残りの部分が動作しないと思います。 –

4

ではありませんのでmaxgamesには、確かに、1として出てくるん:

myGameCountLbl.Text = maxGames.ToString(); 

その後、myGameCountLblのいずれかがnullの場合、またはmaxGamesがあります。 maxGamesが10進数であるとすると、myGameCountLblはnullであることが示唆されます。

これにデバッグして適切な行にブレークポイントを置くとどうなりますか? myGameCountLblには何が表示されますか?

+0

myGameCountLblがヌルとして登場しているようです...私はnewbのために申し訳ありません...どうすればこの問題を解決できますか?実際、maxGamesは1になるので、問題はありません。 – Eric

+0

あなたはそれをどこかで初期化する必要があります。あなたの見積もりを見ずに言うのは難しいでしょう。 UIデザイナーを使用している場合は、既に初期化されていると思います。 –

0

なぜその行にブレークポイントを置き、両方のオブジェクトの現在の状態をデバッグしないのですか?マックスはどこから来ているの?

MainForm.maxGameCountLblUpdate(max);

1

また、すべての例外でVisual Studioを中断したり、すべてのNullReferenceExceptionsを解除したりして、何が起きているのかを調べることもできます。

(デバッグ - >例外 - >共通言語ランタイム例外...)

0

私はこれがずっと前に投稿されたことを知っていますが、私は同じ問題に遭遇し、これが私がそれを解決した方法です。

あなたが提供するトラブルシューティングのヒントを見てみると、もう一つは示唆している:オブジェクトは、メソッドを呼び出す前にnullであるかどうかを判断するために

チェックを。

これは実際の解決策です。あなたが呼んでいた - 私はそれが

+0

しかし、あなたのコードに大量のifを埋め込むことは、必ずしも最善のことではありません。値がnullの場合は、コード内のメジャーなバグのサインとなることがあります。処理されたケースで特定の値がnullになることがわかっている場合にのみ、NULLを処理する必要があります。 – LightStriker