|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||||||
Удалить динамически созданные объекты17.02.2015, 08:04. Показов 11656. Ответов 20
Метки нет (Все метки)
Доброго времени суток!
У меня есть панелька. Я хочу динамически на ней создавать контролы. Контролы будут создаваться группами. Например, создам textBox и listBox. Когда они станут не нужны, хочу удалить их из панели создать там richTextBox. И наоборот. Т.е. создавать и удалять группы по мере надобности. Пробую удалять при помощи Dispose() перебирая все контролы в панели
Почему не все разом за один проход? И еще. Правильный ли у меня подход - создавать контролы и затем удалять их по мере ненадобности? Или лучше скрывать их при помощи Hide() или удалять их из коллекции при помощи panel1.Controls.Remove(.....
0
|
||||||
| 17.02.2015, 08:04 | |
|
Ответы с готовыми решениями:
20
Динамически созданные компоненты Как переместить созданные объекты |
|
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
|
||||||||||||
| 17.02.2015, 10:10 | ||||||||||||
|
А не проще сделать так?
Экономия!Добавлено через 10 минут Удаление по группам. Сначала узнаем, что за тип у контрола:
0
|
||||||||||||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||
| 17.02.2015, 20:25 [ТС] | ||
|
Разве нет? Не получится так, что не уничтожая объекты, я буду создавать новые и новые с каждым вызовом? Не приведет ли это к засорению памяти?
0
|
||
|
116 / 116 / 42
Регистрация: 27.02.2013
Сообщений: 899
|
||||||
| 17.02.2015, 20:33 | ||||||
|
Андрей69, При создании контролов задавайте им имена через свойство Name и тогда сможете в любой момент удалить их из коллекции методом RemoveByKey:
1
|
||||||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||
| 17.02.2015, 21:38 [ТС] | ||
|
Я создаю где то объект TextBox. Прописываю его в коллекции панели (Parent = panel1). Означает ли что удаляя из коллекции (panel1.Controls.RemoveByKey()) удаляется и объект?
0
|
||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||
| 17.02.2015, 21:41 | ||
|
удалил из колекции и он удалился из формы (или панели где он был) не заморачивайся удалением объектов
1
|
||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
|||||||
| 17.02.2015, 22:00 [ТС] | |||||||
![]() Дам пример
Очищаю коллекцию. Снова прописываю объект в panel1. Значение "Text" сохранилось. Значит объект не был удален (я имею ввиду все ссылки на него а не сборщик мусора)
0
|
|||||||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||
| 17.02.2015, 22:07 | ||
|
у нас ссылка tbx2 если является полем класса, то пока жив объект этого класса, сам tbx2 тоже будет жить. если это ссылка (tbx2 ) объявлена в методе, то вне контекста к ней и не обратишься, и если очистишь панель, то и в последствии удалится этот текст бокс tbx2 как объект.
1
|
||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||||||||
| 17.02.2015, 22:13 [ТС] | ||||||||
|
Либо я вас не понимаю, либо плохо задаю вопрос.
0
|
||||||||
|
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,095
|
|
| 17.02.2015, 22:18 | |
|
0
|
|
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
|
| 17.02.2015, 22:19 | |
|
эм здесь область действия ссылки tbx2 заканчивается как только метод закончится.
то есть в методе это после panel1.Controls.Clear(); и до конца tbx2 еще есть. я имел ввиду что если после метода сделать очистку коллекции, и попытаться найти tbx2 ,то не удастся
0
|
|
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
|||||||
| 17.02.2015, 22:24 [ТС] | |||||||
|
nedel,
А вы что скажете ![]() Добавлено через 4 минуты Как мне удалять объекты? Видимо Dispose()? Но у меня с этим была проблема. Но могу циклом удалить объекты, родителем которых является panel1.
0
|
|||||||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
|||||
| 17.02.2015, 22:26 | |||||
|
Добавлено через 52 секунды
0
|
|||||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
|||||||
| 17.02.2015, 22:33 [ТС] | |||||||
0
|
|||||||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||||
| 17.02.2015, 22:37 | ||||||
|
Андрей69, для чего вы используйте метод .Dispose() ? это не правильно. он не для этого предназначен.
вот удаляет все контролы из коллекции
0
|
||||||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
|
| 17.02.2015, 22:41 [ТС] | |
|
Не обижайтесь, но похоже теперь вы готовы прочитать начала топика еще раз.
Там два вопроса : по конкретной проблеме и второй - правильно ли я поступаю (даже если решить указанную проблему.)
0
|
|
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
|
| 17.02.2015, 22:52 | |
Сообщение было отмечено Андрей69 как решение
Решение
Андрей69, в общем удаляй через Controls.Clear() или Controls.Remove, там три метода
если контролы после удаления должны будут опять восстанавливаться, то либо хайдить их, либо заранее прописывать в списке или массиве (который сделать полем класса формы). можно хранить контролы изначально в разных группах списков/массивов, чтобы потом удалять необходимые из панели. а не все сразу (то есть выборочно) или давать контролам осмыссленые имена, и по этим именам потом удалять
1
|
|
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||||||
| 17.02.2015, 22:59 [ТС] | ||||||
|
Metall_Version,
Спасибо за ответ. Я не спорю с вами. Мне просто нужно понять. Приведет ли такая конструкция к засорению памяти (пример чисто теоретический)
0
|
||||||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||||||||||
| 17.02.2015, 23:10 | ||||||||||||
то есть на память такое не влияет. и если это повторять сто раз (то добавлять то удалять) то память будет то увеличиватся на мизер (количество контролов помещенных в панель * на 32 бита (х86 ОС)) при методах
1
|
||||||||||||
|
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100
|
||||||||||||
| 17.02.2015, 23:21 [ТС] | ||||||||||||
А если создавать много объектовПриведет ли такая конструкция к засорению памяти?
0
|
||||||||||||
| 17.02.2015, 23:21 | |
|
Помогаю со студенческими работами здесь
20
Подписать на событие динамически созданные TextBox Динамически созданные элементы. Подписка на события Обработка нажатий на динамически созданные Buttons Вывод записей Vk в динамически созданные Label Как перемещать созданные объекты в picturebox мышкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|