Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Андрей69
2 / 2 / 1
Регистрация: 10.03.2013
Сообщений: 75
#1

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

17.02.2015, 08:04. Просмотров 1934. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2015, 08:04
Ответы с готовыми решениями:

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

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

Как переместить созданные объекты
Я создаю некоторое количество объектов, в моём случае это кубики. Мне нужно...

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

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

20
Metall_Version
2118 / 1255 / 516
Регистрация: 04.03.2014
Сообщений: 4,094
Завершенные тесты: 2
17.02.2015, 23:56 #21
Цитата Сообщение от Андрей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
17.02.2015, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2015, 23:56

Подписать на событие динамически созданные TextBox
Создаю массив TextBox-ов : TextBox tb = new TextBox; for (int...

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

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


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru