c#当我将控件添加到面板时,该控件变为NULL

本文关键字:控件 NULL 添加 | 更新日期: 2023-09-27 18:22:15

我的项目中有两个表单,我正试图将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。

我不明白为什么会发生这种事。

c#当我将控件添加到面板时,该控件变为NULL

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

来自ControlCollection.Add:的文档

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

如果你仔细想想,这是有道理的——一个小组需要知道它在哪里,有多大等等。从逻辑上讲,它一次只能在一个地方。

顺便说一句,当你无条件地进行强制转换时,我建议你使用强制转换而不是as,就好像强制转换已经起作用一样——这样,如果相关对象不是正确的类型,你会在检测的最早时刻得到一个异常,而不是通过你的系统传播自己的null引用,可能在很长一段时间内没有被发现(这使得诊断问题变得更加困难,并且引入了数据丢失的可能性)。