2016-05-21 4 views
0

私はカスタムコントロールを設計したプロジェクトで作業しています。グループボックスに追加してグループボックス内に配置しようとしています。グループボックス内のカスタムコントロールの場所を変更する(null参照例外を返します)

コントロールをボックスに初期化して追加する操作は正常ですが、コントロールを移動またはサイズ変更しようとすると例外が発生します。

 //initialise using object in outputs collection 
     VitalsVisual vitalsVisual = vitalOutputs.getVitalsVisual(); 
     //add to relevant groupbox 
     grpbxIntraOp.Controls.Add(vitalsVisual); 
     //change location (coordinates within groupbox) 
     vitalsVisual.Location = new Point(249, 256); //THROWS EXCEPTION 
     //resize 
     vitalsVisual.Size = new Size(494, 342); //THROWS EXCEPTION IF REACHED 

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という表示があります。 VitalsVisual vitalsVisualが初期化されていないが、コンストラクタが呼び出され、Controls.Add()コマンドが機能しているため、これは実際にはわかりません。確かに初期化されていなければ、このコマンドは同じ例外をスローします。

ここで間違っている可能性があるのは誰でも見つけられますか?正しい方向への動きに本当に感謝しています!

ありがとう、マーク

+0

'getVitalsVisual'は実際に値を返しますか、それともnullを返しますか? 'VitalsVisual'コントロールは何を継承していますか? – kagelos

+0

提案された答えは、これを正しくデバッグできなかった理由を説明しますが、_problem_を実際には解決しません。つまり、null参照があります。 'NullReferenceException'をデバッグする方法については、重複している箇所にある広範囲なアドバイスを参照してください。なぜ、「なぜこの例外が発生するのですか?その時点で問題が残っている場合は、問題を確実に再現する良い[mcve]を提供している新しい質問と、特に問題があることの正確な説明を尋ねてください。 –

+0

コントロールがコントロールコレクションに追加できると誤って想定していたので重複しているわけではなく、nullにすることはできません。なぜこれが間違った前提であるのか説明しました。 'getVitalsVisual'をデバッグすることは次のステップですが、ここでは問題はありません。 – TaW

答えて

1

興味深いが、それは設計によるものです。

テスト:

Button button = null; 
this.Controls.Add(button); 
button.Location = Point.Empty; 

を追加するときそれは、最後ラインで投げていない、すなわち、これは

ので

それはnullを追加するをしようとを許可されている..ちょうど同じことをコレクションはControlsになります。

私はControls.Addが実際には静かを失敗しないために 'しよう' を書いた:

Button button = null; 
Console.WriteLine(this.Controls.Count + " controls now."; 
this.Controls.Add(button); 
Console.WriteLine("Still " + this.Controls.Count + " controls."; 

数に変化を。だから、合計する

public virtual void Add(Control value) { if (value == null) return; ...

:あなたの機能が確実にnullオブジェクトを返しますが、エラーが抑制され

sourcesを見て、これを確認しました。バグか機能ですか?

関連する問題