Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100

Удалить динамически созданные объекты

17.02.2015, 08:04. Показов 11895. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

У меня есть панелька. Я хочу динамически на ней создавать контролы.
Контролы будут создаваться группами. Например, создам textBox и listBox.
Когда они станут не нужны, хочу удалить их из панели создать там richTextBox.
И наоборот. Т.е. создавать и удалять группы по мере надобности.

Пробую удалять при помощи Dispose() перебирая все контролы в панели
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void Form1_Load(object sender, EventArgs e)
        {
           //создание контролов 
           ListBox lbxCognates = new ListBox() { Parent = panel1, Dock = DockStyle.Bottom, Height = 350, Font = new Font("Arial Unicode MS", 10) };
           TextBox tbxEnterWord = new TextBox() { Parent = panel1, Dock = DockStyle.Top, Font = new Font("Arial", 16) };
        }
 
        // Удаление контролов
        private void button1_Click(object sender, EventArgs e)
        {
           foreach (Control ctrl in panel1.Controls) ctrl.Dispose();
        }
При нажатии на button1 удаляются не все контролы а один. При нажатии еще раз button1 - еще один.
Почему не все разом за один проход?

И еще. Правильный ли у меня подход - создавать контролы и затем удалять их по мере ненадобности?
Или лучше скрывать их при помощи Hide() или удалять их из коллекции при помощи panel1.Controls.Remove(.....
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2015, 08:04
Ответы с готовыми решениями:

Удалить динамически созданные textBox
Здравствуйте! По нажатии кнопки создаю textBox. как при нажатии другой кнопки удалить последний созданный? private void...

Динамически созданные компоненты
Имеется форма с созданным на ней datagridview. Остальные компоненты по мере необходимости создаются динамически. Динамически созданная...

Как переместить созданные объекты
Я создаю некоторое количество объектов, в моём случае это кубики. Мне нужно перемещать их всех. Пробовал так: if(e.KeyCode == Keys.D){ ...

20
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
17.02.2015, 23:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Андрей69 Посмотреть сообщение
Приведет ли такая конструкция к засорению памяти?
ну почему засорению, если все 100 контролов вам нужны, то это не засорение,
вообще 100 это не цифра, вполне может столько быть в обычном проекте на винформах и даже больше.
главное понимать что от операций Controls.Add Controls.Clear, память почти не меняется (размерами ссылок можно пренебречь) а меняется только оператором new , который создает новый объект (контрол) в куче.

в после такого кода, память не изменится, ибо мы добавили и сразу удалили (и так 100 раз),
и потом через какое то время сборщик мусора сам почистит все 100 этих созданных текстбоксов, ибо на них нету ссылок ни где более
C#
1
2
3
4
5
            for (int i = 0; i < 100; i++)
            {
                panel1.Controls.Add( new TextBox() );
                panel1.Controls.Clear();
            }


Цитата Сообщение от Андрей69 Посмотреть сообщение
Или так нельзя?
нельзя, это метод не для этих целей, он нужен чтобы освободить ресурсы используемые контролом.
точно почему не знаю, возможно при вызове ctrl.Dispose(); в фориче вызывалось какое-то исключение, и итерации прекращались.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2015, 23:56
Помогаю со студенческими работами здесь

Подписать на событие динамически созданные TextBox
Создаю массив TextBox-ов : TextBox tb = new TextBox; for (int i = 0; i &lt; tb.Length; i++) { ...

Динамически созданные элементы. Подписка на события
Подскажите пожалуйста как создать событие для каждой программно созданной кнопки? И ещё мне нужно чтобы при следующем запуске программы...

Обработка нажатий на динамически созданные Buttons
Доброго времени суток!вот с такая проблема: пишу программу для бронирования мест в кинотеатре, в зависимости от зала динамически создаю...

Вывод записей Vk в динамически созданные Label
Ребята помогите пожалуйста. Как можно вывести нормально разборчиво записи из вк в различные леболы. И при этом сделать возможный вывод...

Как перемещать созданные объекты в picturebox мышкой
Подскажите как перемещать созданные объекты по пикчербоксу, кликать на объект и чтобы после этого они становились доступными для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru