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

Jae*_*bum 1 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.
Run Code Online (Sandbox Code Playgroud)

突然,form2.Controls ["panel1"]变为NULL.

我不明白为什么会这样.

Jon*_*eet 5

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

来自以下文档ControlCollection.Add:

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

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

as顺便说一句,我建议使用强制转换,而不是当你无条件地继续进行,就像演员有效一样 - 这样,如果相关对象不是正确的类型,你会在最早的时刻得到一个例外.检测,而不是null通过您的系统传播自身的参考,可能不会被长时间拾取(使得更难以诊断问题引入数据丢失的可能性).