Итерация посредством средств управления на Windows Form

У меня, кажется, есть некоторая странная проблема, идущая на это, я уверен, окажется простой вещью. У меня есть Windows Form, и на форме у меня есть 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. ["MainPanel"].Controls средств управления. Количество" в непосредственном окне, это возвращается 2, точно так же, как оно должно. Однако при продвижении через код, это только выполняет цикл foreach однажды. Что я пропускаю здесь?

1
задан Icemanind 17 May 2010 в 01:37
поделиться

1 ответ

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

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

EDIT: Например:

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) {
    MainPanel.Controls[i].Parent = m_OptionsControl;
}
2
ответ дан 3 September 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: