динамическое управление пользователем в вопросе winform - PullRequest
0 голосов
/ 19 августа 2011

У меня есть пользовательский элемент управления, который я добавляю во время выполнения на панель.Существует кнопка «Добавить» для добавления того же пользовательского элемента управления на панель.Мой вопрос заключается в том, каков наилучший способ очистки пользовательских элементов управления (правильного их удаления) при сохранении формы или очистке формы?Я хочу удалить все дополнительные пользовательские элементы управления, которые были добавлены с помощью кнопки «Добавить», и очистить первый.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Метод Control.ControlCollection.Remove сделает свое дело. Запустите это на контейнере вашего пользовательского элемента управления.

Например, если тип вашего пользовательского элемента управления равен YourUserControlType, а контейнер, из которого вы хотите удалить все экземпляры вашего пользовательского элемента управления, это Panel с именем panel1, этот код должен работать:

var controlList = new List<YourUserControlType>(panel1.Controls.OfType<YourUserControlType>());
controlList.ForEach(c => {
    panel1.Controls.Remove(c);
});

РЕДАКТИРОВАТЬ: для .NET 2.0 +

List<YourUserControlType> controlList = new List<YourUserControlType>();
for (int i = 0; i < panel1.Controls.Count; i++) {
    YourUserControlType uc = panel1.Controls[i] as YourUserControlType;
    if (uc != null) {
        controlList.Add(uc);
    }
}

foreach (YourUserControlType uc in controlList) {
    panel1.Controls.Remove(uc);
}

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

0 голосов
/ 19 августа 2011

Поскольку вы не предоставляете много конкретной информации о том, как добавлять эти элементы управления во время выполнения, я предполагаю, что вы создаете их экземпляры (используя new), а затем добавляете их в коллекцию Controls форм.

Один из способов удаления этих добавленных элементов управления во время выполнения состоит в том, чтобы также добавить их в список, а когда вам нужно удалить все элементы управления во время выполнения, просто выполните итерацию по списку, вызывая MyForm.Controls.Remove (theControl) для каждого элемента управления. в списке. Завершите, вызвав Clear () в списке.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...