2012-02-03 30 views
1

我的項目中有兩種形式,我試圖將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 [ 「PANEL1」]成爲空。

我不明白爲什麼會發生。

回答

5

一個控件只能有一個父 - 如果您已將一個父控件添加到另一個控件的父控件中,它將首先將其自身刪除。

從文檔爲ControlCollection.Add

A控制只能在一個時間被分配給一個Control.ControlCollection。如果該控件已經是另一個控件的子控件,則該控件在添加到另一個控件之前會從該控件中刪除。

如果你考慮一下,那就很有道理 - 面板需要知道它在哪裏,它有多大等。它在邏輯上只能在一個地方一次。

順便說一句,我建議使用強制,而不是as當你無條件地繼續進行,就好像在上石膏工作 - 這樣,如果所涉及的對象是不正確類型的,你在檢測的最早時刻是一個例外,而不是通過您的系統傳播自己的參考,可能不會被長時間拾取(使得難以診斷問題引入數據丟失的可能性)。