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

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

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

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

И при повторном вызове события, CheckBox_CheckedChanged смотрит уже на старый контрол который не удалился, как быть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2013, 23:44
Ответы с готовыми решениями:

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

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

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

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

6
37 / 37 / 6
Регистрация: 06.01.2013
Сообщений: 195
24.01.2013, 03:28 2
Тут скорее всего когда ты эти checkbox создаешь, нужно им задавать значение по умолчанию, например False, и потом юзать их.
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
24.01.2013, 05:58 3
Saldoran, А какое поведение вы хотите? Controls.Remove всего лишь навсего удаляет Control из соответствующей коллекции формы. Так как у вас указатель на данный контрол содержится еще и в вашем массиве, то GC не съедает ваш CheckBox, поэтому при повтороном добавлении элементов массива на форму они появляются в том же виде, в котором были до удаления с формы. Если вы хотите, чтобы на форму добавлялись новые CheckBox'ы, то пересоздавайте массив перед их добавлением.
0
24 / 24 / 9
Регистрация: 18.12.2012
Сообщений: 194
24.01.2013, 17:19  [ТС] 4
я когда пересоздаю этот массив, при вызове события CheckBox_CheckedChanged он какбуд-то смотрит на значения старого контрола, как будто он невидимый существует гдето
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
24.01.2013, 17:33 5
как и сказал kodv, он и существует.
Добавлять просто надо не поверхностным копированием ссылок, если не хочешь чтоб изменения контролов формы приводили к изменениям эллементов твоего массива, то контролы необходимо создавать.
C#
1
2
3
4
newCheckBox = new CheckBox();
newCheckBox.Text=checkbox[Counter].Text;
...
Controls.Add(newCheckBox );
Добавлено через 36 секунд
правда как такие удалять не помню, по моему по ключу Name
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
24.01.2013, 18:07 6
Saldoran, Каким образом вы его пересоздаете? Так:
C#
1
checkbox = new CheckBox[CheckBoxesCount];
В этом случае в ваш массив попадут новые значения чекбоксов, а старые останутся на съедение GC.
0
24 / 24 / 9
Регистрация: 18.12.2012
Сообщений: 194
24.01.2013, 23:03  [ТС] 7
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
24.01.2013, 23:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2013, 23:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru