Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
24 / 24 / 9
Регистрация: 18.12.2012
Сообщений: 194

Как удалить динамически созданный контрол?

23.01.2013, 23:44. Показов 3546. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим у меня есть массив чекбоксов. И мы отметили их как true;
Если пользоваться
C#
1
Controls.Remove(checkbox[Counter]);
то при повторном добавлении их на форму:
C#
1
Controls.Add(checkbox[Counter]);
значение checkbox.Checked останется как и было.

И при повторном вызове события, CheckBox_CheckedChanged смотрит уже на старый контрол который не удалился, как быть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2013, 23:44
Ответы с готовыми решениями:

Как удалить динамически созданный контрол?
public void button1_Click(object sender, EventArgs e) { DataGridView DataView1 = new DataGridView; ...

Как удалить динамически созданный пользовательский контрол?
При каждом нажатии на кнопку создается новый пользовательский контрол using System; using System.Collections.Generic; using...

Как удалить динамически созданный элемент?
Создаю некоторое количество label (каждый раз разное). Необходимо некоторые удалить. Попытался через label.Dispose(), но выбивает...

6
 Аватар для Игрок_со_Смерть
37 / 37 / 6
Регистрация: 06.01.2013
Сообщений: 195
24.01.2013, 03:28
Тут скорее всего когда ты эти checkbox создаешь, нужно им задавать значение по умолчанию, например False, и потом юзать их.
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
24.01.2013, 05:58
Saldoran, А какое поведение вы хотите? Controls.Remove всего лишь навсего удаляет Control из соответствующей коллекции формы. Так как у вас указатель на данный контрол содержится еще и в вашем массиве, то GC не съедает ваш CheckBox, поэтому при повтороном добавлении элементов массива на форму они появляются в том же виде, в котором были до удаления с формы. Если вы хотите, чтобы на форму добавлялись новые CheckBox'ы, то пересоздавайте массив перед их добавлением.
0
24 / 24 / 9
Регистрация: 18.12.2012
Сообщений: 194
24.01.2013, 17:19  [ТС]
я когда пересоздаю этот массив, при вызове события CheckBox_CheckedChanged он какбуд-то смотрит на значения старого контрола, как будто он невидимый существует гдето
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
24.01.2013, 17:33
как и сказал kodv, он и существует.
Добавлять просто надо не поверхностным копированием ссылок, если не хочешь чтоб изменения контролов формы приводили к изменениям эллементов твоего массива, то контролы необходимо создавать.
C#
1
2
3
4
newCheckBox = new CheckBox();
newCheckBox.Text=checkbox[Counter].Text;
...
Controls.Add(newCheckBox );
Добавлено через 36 секунд
правда как такие удалять не помню, по моему по ключу Name
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
24.01.2013, 18:07
Saldoran, Каким образом вы его пересоздаете? Так:
C#
1
checkbox = new CheckBox[CheckBoxesCount];
В этом случае в ваш массив попадут новые значения чекбоксов, а старые останутся на съедение GC.
0
24 / 24 / 9
Регистрация: 18.12.2012
Сообщений: 194
24.01.2013, 23:03  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
CheckBox[] chckb = new CheckBox[100];
        Label[] label = new Label[100];
        string[] paths = new string[100];
        ComboBox[] CmboBx = new ComboBox[100];
        string[] FileTypes = { "AVI", "MP3", "JPG", "MKV" };
        private void InitializeNewComponents()
        {
            for (int i = 0; i < button.Length; i++)
            {
                button[i] = new Button();
                button[i].Location = new Point(248, 85 + i * 30);
                button[i].Name = "Button" + i.ToString();
                button[i].Size = new Size(75, 23);
                button[i].TabIndex = i;
                button[i].Text = "Browse...";                
                button[i].Click+=new EventHandler(button1_Click);
                chckb[i] = new CheckBox();
                chckb[i].Location = new Point(327, 86 + i * 30);
                chckb[i].Name = "CheckBox" + i.ToString();
                chckb[i].Checked = false;
                chckb[i].Text = "Add more filters";
                chckb[i].CheckedChanged +=new EventHandler(checkBox_CheckedChanged);
                label[i] = new Label();
                label[i].Location = new Point(64, 90 + i * 30);
                label[i].Name = "PathLabel" + i.ToString();
                label[i].Text = "******ation: ";
                CmboBx[i] = new ComboBox();
                CmboBx[i].Location = new Point(15, 86 + i * 30);
                CmboBx[i].Size = new Size(43,23);
                CmboBx[i].MaxLength = 3;
                CmboBx[i].Name = "ComboBox" + i.ToString();
                CmboBx[i].Items.AddRange(FileTypes);
            }
        }
Добавлено через 55 минут
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
правда как такие удалять не помню, по моему по ключу Name
По ключу тоже самое

Добавлено через 3 часа 36 минут
Проблема была решена с помощью Dispose()
Далее чтоб добавить контрол обратно, приходиться его инициализировать заного
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
InitialOneNewComponentsStroke(i);
private void InitialOneNewComponentsStroke(int i)
        {
            button[i] = null;
            button[i] = new Button();
            button[i].Location = new Point(248, 85 + i * 30);
            button[i].Name = "Button" + i.ToString();
            button[i].Size = new Size(75, 23);
            button[i].TabIndex = i;
            button[i].Text = "Browse...";
            button[i].Click += new EventHandler(button1_Click);
            chckb[i] = null;
            chckb[i] = new CheckBox();
            chckb[i].Location = new Point(327, 86 + i * 30);
            chckb[i].Name = "CheckBox" + i.ToString();
            chckb[i].Checked = false;
            chckb[i].Text = "Add more filters";
            chckb[i].CheckedChanged += new EventHandler(checkBox_CheckedChanged);
            label[i] = new Label();
            label[i].Location = new Point(64, 90 + i * 30);
            label[i].Name = "PathLabel" + i.ToString();
            label[i].Text = "******ation: ";
            CmboBx[i] = new ComboBox();
            CmboBx[i].Location = new Point(15, 86 + i * 30);
            CmboBx[i].Size = new Size(43, 23);
            CmboBx[i].MaxLength = 3;
            CmboBx[i].Name = "ComboBox" + i.ToString();
            CmboBx[i].Items.AddRange(FileTypes);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2013, 23:03
Помогаю со студенческими работами здесь

Каждой динамически созданной кнопке свой динамически созданный PictureBox
Добрый день. Надеюсь, что пишу в тот раздел. Находил немного похожие темы: каждая созданная кнопка оперирует с уже существующим объектом,...

Как убить поток, созданный динамически
К примеру поток создаётся так: void MyMetod(int a, int b) { MessageBox.Show((a * b).ToString()); } ...

Как подписать на событие динамически созданный компонент
Допустим я программно создал и разместил на форме несколько button, как сделать событие клик button ???

Как получить данные, введенные в динамически созданный элемент TextBox?
Подскажите пожалуйста как получить данные, вводимые в элемент TextBox, который был создан во время выполнения программы. namespace Test1 ...

Как удалить программно созданный TextBox()
По нажатию кнопки создаю текстовое поле, а вот как удалить какое то конкретно в середине созданное поле, не знаю. Если быть точнее то...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru