Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 08.05.2014
Сообщений: 57
1

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

28.05.2014, 08:04. Показов 1557. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, познания в С# на настоящее время не глубоки и не откажусь от любой помощи, извините если тема повторяется.
На форме создал панель с кнопками на ней. по нажатию кнопки динамически добавляю точно такую же панель с точно такими же кнопками. Реализовал вот так:
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
 public partial class Form1 : Form
    {
        List<Button> but1 = new List<Button>();
        List<Panel> pnlist1 = new List<Panel>();
        List<Control> cntrlist = new List<Control>();
        int x = 1;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            but1.Clear();
 
            for (int i=0; i < this.panel1.Controls.Count; i++)
            {
                if (this.panel1.Controls[i].Name.Contains("utton"))
                {
                    Button btt1 = new Button();
                    btt1.Name = "btt1" + this.panel1.Controls[i].Name + Convert.ToString(x);
                    btt1.Location = new Point(this.panel1.Controls[i].Left, this.panel1.Controls[i].Top);
                    btt1.Size = this.panel1.Controls[i].Size;
                    btt1.Text = this.panel1.Controls[i].Text;
                    but1.Add(btt1);
                }
            }
 
            Panel pnn1 = new Panel();
            pnn1.Name = "pnn1" + panel1.Name + Convert.ToString(x);
            pnn1.Height = panel1.Height;
            pnn1.Width = panel1.Width;
            pnn1.BorderStyle = BorderStyle.FixedSingle;
 
            if (x == 1)
            {
                int k = panel1.Top + panel1.Height + 10;
                pnn1.Location = new Point(panel1.Left, k);
                this.Controls.Add(pnn1);
                pnlist1.Add(pnn1);
            }
 
            if (x > 1)
            {
                int k = pnlist1[pnlist1.Count - 1].Top + pnlist1[pnlist1.Count - 1].Height + 10;
                pnn1.Location = new Point(panel1.Left, k);
                this.Controls.Add(pnn1);
                pnlist1.Add(pnn1);
            }
 
            for (int j = 0; j < but1.Count; j++)
            {
                pnn1.Controls.Add(but1[j]);
            }
 
            x++;
        }
Догадываюсь что это можно сделать проще и оптимальнее создав класс или классы, но знаний пока не хватает. Подскажите или я прав и как это можно сделать, если можно с примером.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2014, 08:04
Ответы с готовыми решениями:

Динамическое добавление контролов
Подскажите как делаеца подобная штука В моем примере нужно создавать таймеры с событиями Таймеров может быть несколько Количество заранее...

Возможно ли Динамическое добавление контролов на форму из другого класса
к примеру есть форма Form1 есть класс CreateBoard и метод public static void Create() { Form1 f1 = new...

Динамическое отображение контролов
Добрый день! Подскажите как реализовать следующую задачу: 1) есть treeView на левой панели формы. В котором отображается...

2
1161 / 881 / 515
Регистрация: 09.04.2014
Сообщений: 2,089
28.05.2014, 13:29 2
Создайте UserControl на котором поместите все нужные контроллы, а потом добавляйте уже этот UserControl
0
3 / 3 / 0
Регистрация: 08.05.2014
Сообщений: 57
28.05.2014, 13:53  [ТС] 3
Цитата Сообщение от nedel Посмотреть сообщение
Создайте UserControl на котором поместите все нужные контроллы, а потом добавляйте уже этот UserControl
форм много, и количество кнопок и их позиция может быть разная.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2014, 13:53
Помогаю со студенческими работами здесь

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

Динамическое создание контролов
Для конечного автомата, к примеру нужно 10 состояний. При нажатии кнопки Создать, автоматически создается такой набор TextBox и Label. Как...

Динамическое создание контролов
Привет. У меня на форуме динамически создаются объекты(типа panel), и им присваиваются разные имена. Как бы мне создать такой обработчик...

Динамическое создание контролов
Ну как так то??? public Form1() { InitializeComponent(); } private Label lbl =...

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
std::mutex в C++: Хитрости и тонкости использования
Wired 03.03.2025
В C++ ключевым инструментом для обеспечения корректной работы параллельных процессов выступает std::mutex – примитив синхронизации, появившийся в стандарте C++11. До его появления использовали. . .
std::span в C++: Производительно­сть и практическое использование
Wired 03.03.2025
Традиционная работа с указателями и массивами часто приводит к ошибкам и уязвимостям в безопасности. Именно поэтому в C++20 появился std::span - легковесная обертка, обеспечивающая безопасный. . .
std::span в C++: Константность и безопасность типов
Wired 03.03.2025
std::span - представитель семейства view-типов, появившийся в стандарте C++20. Этот компонент предоставляет легковесное и эффективное решение для работы с непрерывными последовательностями данных,. . .
std::span в C++: Subview и Slice
Wired 03.03.2025
std::span - невладеющий тип данных C++, который предоставляет гибкий интерфейс для работы с непрерывными последовательностями элементов. Этот тип существенно упрощает обработку массивов и. . .
std::span в C++: Доступ к элементам и итерирование
Wired 03.03.2025
Появление std::span в стандарте C++20 стало значительным шагом вперед, предоставив разработчикам средство для безопасного и производительного доступа к непрерывным последовательностям элементов. . . .
std::span в C++: Управление массивами данных без владения
Wired 03.03.2025
Новый класс std::span, появившийся в стандарте C++20, открывает возможности для оптимизации работы с последовательными наборами данных. По сути, это легковесная обертка, которая предоставляет доступ. . .
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru