c#当我向面板添加控件时,控件变为NULL

时间:2012-02-03 07:55:27

标签: c# forms controls panel

我的项目中有两种形式,我正在尝试将Form2面板的控件添加到Form1的面板中。

所以,

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”]变为NULL。

我无法理解为什么会这样。

1 个答案:

答案 0 :(得分:5)

一个控件只能有一个父控件 - 如果你将已经父控件的控件添加到另一个控件,它将首先删除它。

来自ControlCollection.Add的文档:

  

Control一次只能分配给一个Control.ControlCollection。如果Control已经是另一个控件的子控件,则在将控件添加到另一个控件之前将其从该控件中删除。

如果你考虑一下,这是有道理的 - 一个小组需要知道它在哪里,它有多大等等。它实际上只能在一个地方存在。

顺便说一下,当你无条件地继续进行时,我建议使用强制转换而不是as,就好像投射有效一样 - 如果相关对象不是在正确的类型中,您会在检测的最早时刻获得异常,而不是通过您的系统传播自身的null引用,可能不会被长时间拾取(使诊断问题变得更难< em>和引入数据丢失的可能性。)