2010-05-17 5 views
1

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

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 только один раз. Что мне здесь не хватает?

ответ

2

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

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

EDIT: Например:

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) { 
    MainPanel.Controls[i].Parent = m_OptionsControl; 
} 
+0

Moving является то, что я хочу. У вас есть пример того, что вы подразумеваете под обратным циклом? – Icemanind

+0

@icemanind: Здесь вы идете. – SLaks

+0

Вы не имеете в виду i--? – jjxtra