2012-02-03 18 views
1

私のプロジェクトには2つのフォームがあり、Form2のパネルのコントロールをForm1のパネルに追加しようとしています。c#コントロールをパネルに追加すると、コントロールがNULLになる

ので、

Form2 form2 = new Form2(); 
new_panel = form2.Controls["panel1"] as Panel; // form2's panel 

this.panel.Controls.Add(new_panel); // add form2's panel into form1's panel. 

そして突然、form2.Controls [ "パネル1"]はNULLになります。

なぜ起こるのか理解できません。

答えて

5

コントロールには親が1つしかありません。既ににあるコントロールを別のコントロールの親であるに追加すると、最初に削除されます。 ControlCollection.Addのためのドキュメントから

Aコントロールは、一度に1つのControl.ControlCollectionに割り当てることができます。コントロールが既に別のコントロールの子である場合、そのコントロールから削除されてから別のコントロールに追加されます。

これを考えると、パネルはどこにあるのか、どのくらいの大きさなのかを知る必要があります。論理的には、一度に1つの場所にしかできません。そのように、関連するオブジェクトは右のタイプのではない場合、あなたが得る、 - キャストが働いているかのようさておき、私はあなたが無条件に進めているときのキャストではなくasを使用することをお勧めしたいよう

null参照がシステムを介して伝播するのではなく、検出された瞬間の例外ではありません。データを失う可能性があるという問題を診断するのが難しくなります(および)。

関連する問題