C # когда я добавляю элемент управления на панель, элемент управления становится NULL - PullRequest
1 голос
/ 03 февраля 2012

В моем проекте есть две формы, и я пытаюсь добавить элементы управления панели 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 Ответ

5 голосов
/ 03 февраля 2012

У элемента управления может быть только один родительский элемент - если вы добавляете элемент управления, у которого уже есть родительский элемент к другому элементу управления, он сначала удаляется сам.

Из документов на ControlCollection.Add:

Элемент управления может быть назначен только одному элементу Control.ControlCollection одновременно. Если элемент управления уже является дочерним элементом другого элемента управления, он удаляется из этого элемента управления до его добавления в другой элемент управления.

Если подумать, это имеет смысл - панель должна знать, где она, насколько она велика и т. Д. Она действительно может быть логически только в одном месте за раз.

Кроме того, я бы рекомендовал использовать приведение, а не as, когда вы продолжаете безоговорочно, как если бы приведение в действие сработало - таким образом, если соответствующий объект не является из Правильный тип, вы получаете исключение в самый ранний момент обнаружения, вместо ссылки null, распространяющейся по вашей системе и, возможно, не обнаруживаемой в течение длительного времени (что затрудняет диагностику проблемы и введение возможности потери данных).

...