2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 100

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

17.02.2015, 08:04. Показов 11977. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru