我的项目中有两种形式,我正在尝试将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。
我无法理解为什么会这样。
答案 0 :(得分:5)
一个控件只能有一个父控件 - 如果你将已经父控件的控件添加到另一个控件,它将首先删除它。
来自ControlCollection.Add
的文档:
Control一次只能分配给一个Control.ControlCollection。如果Control已经是另一个控件的子控件,则在将控件添加到另一个控件之前将其从该控件中删除。
如果你考虑一下,这是有道理的 - 一个小组需要知道它在哪里,它有多大等等。它实际上只能在一个地方存在。
顺便说一下,当你无条件地继续进行时,我建议使用强制转换而不是as
,就好像投射有效一样 - 如果相关对象不是在正确的类型中,您会在检测的最早时刻获得异常,而不是通过您的系统传播自身的null
引用,可能不会被长时间拾取(使诊断问题变得更难< em>和引入数据丢失的可能性。)