Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382

Динамическое создание и удаление кнопок текстбоксов и прочего

13.08.2019, 11:30. Показов 5075. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно есть код, добавляет нормально, удаляет тоже но только если удалять с последней строки и вверх, а если удалять с середины потом добавить и что нить удалить то получается какая то каша.
https://i.ibb.co/SPdH5jS/image.jpg
Собственно вопрос как сделать нормальное удаление или может при добавление что то не то ? Сам код:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
private void btnAdd_Click(object sender, EventArgs e)
        {
            int count = panel1.Controls.OfType<TextBox>().ToList().Count;
 
            Label lService = new Label();
            lService.Location = new Point(-3, 14 * count);
            lService.Size = new Size(46, 13);
            lService.Name = "lService_" + (count + 1);
            lService.Text = "Услуга:";
            panel1.Controls.Add(lService);
 
            Label lPrice = new Label();
            lPrice.Location = new Point(274, 14 * count);
            lPrice.Size = new Size(40, 13);
            lPrice.Name = "lPrice_" + (count + 1);
            lPrice.Text = "Цена:";
            panel1.Controls.Add(lPrice);
 
            Label lCurrency = new Label();
            lCurrency.Location = new Point(397, 14 * count);
            lCurrency.Size = new Size(48, 13);
            lCurrency.Name = "lCurrency_" + (count + 1);
            lCurrency.Text = "Валюта:";
            panel1.Controls.Add(lCurrency);
 
            Label lDesc = new Label();
            lDesc.Location = new Point(518, 14 * count);
            lDesc.Size = new Size(65, 13);
            lDesc.Name = "lDesc_" + (count + 1);
            lDesc.Text = "Описание:";
            panel1.Controls.Add(lDesc);
 
            ComboBox cbxService = new ComboBox();
            cbxService.Location = new Point(49, 14 * count);
            cbxService.Size = new Size(219, 20);
            cbxService.Name = "cbxService_" + (count + 1);
            panel1.Controls.Add(cbxService);
 
            ComboBox cbxCurrency = new ComboBox();
            cbxCurrency.Location = new Point(451, 14 * count);
            cbxCurrency.Size = new Size(61, 20);
            cbxCurrency.Name = "cbxCurrency_" + (count + 1);
            panel1.Controls.Add(cbxCurrency);
 
            TextBox txbPrice = new TextBox();
            txbPrice.Location = new System.Drawing.Point(316, 14 * count);
            txbPrice.Size = new System.Drawing.Size(75, 20);
            txbPrice.Name = "txbPrice_" + (count + 1);
            panel1.Controls.Add(txbPrice);
 
            //Create the dynamic TextBox.
            TextBox txbDesc = new TextBox();
            txbDesc.Location = new System.Drawing.Point(584, 14 * count);
            txbDesc.Size = new System.Drawing.Size(196, 20);
            txbDesc.Name = "txbDesc_" + (count + 1);
            panel1.Controls.Add(txbDesc);
 
            //Create the dynamic Button to remove the TextBox.
            Button btnDelete = new Button();
            btnDelete.Location = new System.Drawing.Point(786, 14 * count);
            btnDelete.Size = new System.Drawing.Size(27, 22);
            btnDelete.Name = "btnDelete_" + (count + 1);
            btnDelete.Text = "X";
            btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
            panel1.Controls.Add(btnDelete);
        }
 
       
 
 
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //Reference the Button which was clicked.
            Button button = (sender as Button);
 
            //Determine the Index of the Button.
            int index = int.Parse(button.Name.Split('_')[1]);
 
            //Find the TextBox using Index and remove it.
            panel1.Controls.Remove(panel1.Controls.Find("lService_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("lPrice_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("lCurrency_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("lDesc_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("cbxService_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("cbxCurrency_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("txbPrice_" + index, true)[0]);
            panel1.Controls.Remove(panel1.Controls.Find("txbDesc_" + index, true)[0]);
            
            //Remove the Button.
            panel1.Controls.Remove(button);
 
            //Rearranging the Location controls.
            foreach (Button btn in panel1.Controls.OfType<Button>())
            {
                int controlIndex = int.Parse(btn.Name.Split('_')[1]);
                if (controlIndex > index)
                {
                    Label lService = (Label)panel1.Controls.Find("lService_" + controlIndex, true)[0];
                    Label lPrice = (Label)panel1.Controls.Find("lPrice_" + controlIndex, true)[0];
                    Label lCurrency = (Label)panel1.Controls.Find("lCurrency_" + controlIndex, true)[0];
                    Label lDesc = (Label)panel1.Controls.Find("lDesc_" + controlIndex, true)[0];
                    ComboBox cbxService = (ComboBox)panel1.Controls.Find("cbxService_" + controlIndex, true)[0];
                    ComboBox cbxCurrency = (ComboBox)panel1.Controls.Find("cbxCurrency_" + controlIndex, true)[0];
                    TextBox txbPrice = (TextBox)panel1.Controls.Find("txbPrice_" + controlIndex, true)[0];
                    TextBox txbDesc = (TextBox)panel1.Controls.Find("txbDesc_" + controlIndex, true)[0];
                    lService.Top = lService.Top - 28;
                    lPrice.Top = lPrice.Top - 28;
                    lCurrency.Top = lCurrency.Top - 28;
                    lDesc.Top = lDesc.Top - 28;
                    cbxService.Top = cbxService.Top - 28;
                    cbxCurrency.Top = cbxCurrency.Top - 28;                    
                    txbPrice.Top = txbPrice.Top - 28;
                    txbDesc.Top = txbDesc.Top - 28;
                    btn.Top = btn.Top - 28;
 
                }
            }
        }
Добавлено через 2 часа 31 минуту
Вот тут немного неправильно было
C#
1
int count = panel1.Controls.OfType<TextBox>().ToList().Count;
сделал так
C#
1
int count = panel1.Controls.OfType<Button>().ToList().Count;
теперь прибавляет по 1, но все равно это проблему не решило...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2019, 11:30
Ответы с готовыми решениями:

Динамическое создание кнопок
Кнопка start создает 5 label и button. Подскажите пожалуйста, как сделать так, чтобы при нажатии bt удалялись bt и lb. ...

Динамическое создание кнопок
TextBox tbI = new TextBox; Button btU = new Button; Int n=5; for (int i = 0; i &lt; n; i++) { //создание textBox ...

Динамическое создание кнопок
Всем доброго времени суток! Передо мною стала серьезная проблема! Имеется файл &quot;test.txt&quot;, его содержимое: кнопка1 ...

30
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
13.08.2019, 17:12  [ТС]
Студворк — интернет-сервис помощи студентам
AndreyVorobey, да это понятно, вопрос в том в чем его формировать ? ну в каком элементе ?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.08.2019, 17:25
SCAR101, в combobox, listbox, treeview на выбор
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
13.08.2019, 17:29  [ТС]
AndreyVorobey, на чтобы можно было сразу редактировать тривью и лист бокс не подходят, компобокс тоже только для выбора чего либо, а дата грид некрасивый ) вот поэтому и думал что лучше динамически все сделать, но чет все это слишком сложно, походу придется делать в гриде

Добавлено через 1 минуту
AndreyVorobey, конечно было бы удобнее и красивее сделать это все в впф, но впф пока для меня это темный лес )
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
13.08.2019, 17:32
SCAR101, листбокс только для отображения перечня услуг. у тебя на все улуги одни и те же поля.
ты выбираешь услугу и твои данные в текстбоксах обновляются, открывая нужную услугу на редактирование
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
13.08.2019, 17:39  [ТС]
AndreyVorobey, да но я не хочу так )) с таким же успехом грид подойдет )

Добавлено через 1 минуту
AndreyVorobey, блин как бы объяснить то ) я хотел делать динамическую фигню потому что то что отображает в том и редактируешь ) это удобнее ) а так как ты говоришь это и так понятно что легко сделать )
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,870
13.08.2019, 17:52
SCAR101, Дубль два. После внесение данных, нужно нажать на userControl.
Миниатюры
Динамическое создание и удаление кнопок текстбоксов и прочего  
Вложения
Тип файла: rar Dynamically_Create_and_delete2.rar (182.2 Кб, 10 просмотров)
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
13.08.2019, 21:51  [ТС]
Kazbek17, спасибо, но не совсем то, мне нужно эти контролы как то пронумеровать чтоли чтоб по нажатию одной кнопки я мог получить все данные и запихать их в бд, и назад из бд соответственно. То есть я же не могу тыкать на каждый чтобы получать данные, это будет неудобно, думал программно тыкать на них но это же тоже бред. То есть чтоб я мог пробежатся по этим контролам циклом, но для этого надо знать как обратится к каждому из них, а если они не имеют ни имени ни номера то я тогда не понимаю как это можно сделать )
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
14.08.2019, 08:44
SCAR101,
Цитата Сообщение от SCAR101 Посмотреть сообщение
спасибо, но не совсем то, мне нужно эти контролы как то пронумеровать чтоли чтоб по нажатию одной кнопки я мог получить все данные и запихать их в бд, и назад из бд соответственно. То есть я же не могу тыкать на каждый чтобы получать данные, это будет неудобно, думал программно тыкать на них но это же тоже бред. То есть чтоб я мог пробежатся по этим контролам циклом, но для этого надо знать как обратится к каждому из них, а если они не имеют ни имени ни номера то я тогда не понимаю как это можно сделать )
ну и к чему все эти трудности, когда можно сделать нормальный удобный интерфейс без избыточности?
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
15.08.2019, 21:12  [ТС]
AndreyVorobey, ну пока я не придумал как это сделать красиво )
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
16.08.2019, 11:46
SCAR101, давай полное описание ТЗ, придумаем.
0
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382
16.08.2019, 17:19  [ТС]
AndreyVorobey, я же уже писал ) полнее некуда )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2019, 17:19

Динамическое создание кнопок
Вот текст задачи Написать программу, добавляющую на форму кнопки. Кнопки добавляются в узлы прямоугольной сетки. Расстояния между...

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

Динамическое создание 5ти кнопок
Всем доброго времени суток! Передо мною стоит такая задача: В папке d:test есть 5 папок (папка1, папка2, папка3, ... папка5). ...

Динамическое создание заданного количества кнопок
Здравствуйте,мне нужно создать программу которая по нажатию на Button в произвольном месте будет создавать кнопку.Допустим если нажать 7...

Динамическое создание кнопок и добавление функционала
Здравствуйте. Предыстория: пишу дипломпо автоматизации небольших заведений, кафе и т.п(терминал для создания, хранения заказов)....


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru