Перебор элементов управления в форме Windows - PullRequest
1 голос
/ 17 мая 2010

У меня, кажется, есть какая-то странная проблема, которая, я уверен, окажется простой. У меня есть форма Windows, и на форме у меня есть 1 панель с именем MainPanel и внутри MainPanel, у меня есть другая панель с кнопкой внутри и надписью, которая находится внутри MainPanel, но не на второй панели. 2 элемента управления. Я пытаюсь скопировать все элементы управления в MainPanel на другой объект панели. Я использую следующий код C # для этого:

GUIPanel gp = new GUIPanel();
foreach (System.Windows.Forms.Control ctrl in gp.Controls["MainPanel"].Controls)
{
    m_OptionsControl.Controls.Add(ctrl);
}

Когда я запускаю этот код, он копирует панель с кнопкой, но не надписью. Что еще более странно, когда я устанавливаю точку останова и запускаю ее через отладчик, и я набираю "? Gp.Controls [" MainPanel "]. Controls.Count" в ближайшем окне, он возвращает 2, как и должно быть. Однако при пошаговом выполнении кода он выполняет цикл foreach только один раз. Что мне здесь не хватает?

1 Ответ

2 голосов
/ 17 мая 2010

Элементы управления WinForms не могут быть скопированы; ваш код не будет работать правильно.
При добавлении элемента управления на вторую панель он будет удален с первой панели.

Вы можете перемещать все элементы управления с помощью обратной петли for.
Вы можете скопировать элементы управления, создав новый экземпляр каждого элемента управления и скопировав все свойства.

РЕДАКТИРОВАТЬ : Например:

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) {
    MainPanel.Controls[i].Parent = m_OptionsControl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...