Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
11 / 11 / 3
Регистрация: 10.03.2013
Сообщений: 104

Динамическое создание panel в panel

10.03.2013, 00:26. Показов 10272. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Задача: нужно в панели вывести еще одну панель при нажатой радио кнопке.
Первая панель создается с нужными элементами. Вторая не реагирует никак. Подскажите как связать эти панели и радио кнопку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2013, 00:26
Ответы с готовыми решениями:

На родительской форме расположена panel, при открытие дочерней формы, она прячется под panel
Как сделать, чтобы она была сверху?

Очистка текстбоксов и проверка их же на пустоту Panel в Panel
Добрый день! Есть панель Pan_F в ней текстбокс Tb_3 и панель Pan_FxFF в которой 2 текстбокса Tb_1 и Tb_2 вопрос: очищаю все...

Странное наложение Panel/Panel/PictureBox
На одной панели (белая область вокруг шахматной доски), расположена другая панель (сама шахматная доска), назовём их БПанель и МПанель...

9
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
10.03.2013, 00:57
Вот:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 Panel innerPanel = null;
            if (radioButton1.Checked)
            {
                innerPanel = new Panel();
                innerPanel.Name = "innerPanel";
                innerPanel.Size = new Size(100, 100); // for example
                innerPanel.Location = new Point(50, 50);// for example
                innerPanel.BackColor = Color.Red;
                panel1.Controls.Add(innerPanel);
 
            }
            else
            {      
                panel1.Controls["innerPanel"].Dispose();
                //panel1.Controls.RemoveByKey("innerPanel"); так тоже можно
                panel1.Invalidate();
            }
Добавлено через 36 секунд
код обработчика события radioButton1_CheckedChanged
2
11 / 11 / 3
Регистрация: 10.03.2013
Сообщений: 104
10.03.2013, 01:36  [ТС]
IamRain, спасибо, но что-то у меня не получается. Если не трудно, напишите это для моего кода.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace База_данных
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        public Panel Reg()
        {
            Panel panel1 = new Panel();
            panel1.Location = new Point(1, 1);
            panel1.Size = new Size(new Point(528, 247));
            Label label1 = new Label();
            label1.AutoSize = true;
            label1.Text = "Регистрация нового";
            label1.Location = new Point(8, 8);
            panel1.Controls.Add(label1);
            RadioButton radioButton1 = new RadioButton();
            radioButton1.AutoSize = true;
            radioButton1.Text = "Студента";
            radioButton1.Location = new Point(12, 24);
            panel1.Controls.Add(radioButton1);
            RadioButton radioButton2 = new RadioButton();
            radioButton2.AutoSize = true;
            radioButton2.Text = "Преподавателя";
            radioButton2.Location = new Point(12, 40);
            panel1.Controls.Add(radioButton2);
 
            return panel1;
        }
 
        private void регистрацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panel1.Controls.Clear();
            panel1.Controls.Add(Reg());
        }
 
        public Panel Stud()
        {
            Panel panel2 = new Panel();
            panel2.Location = new Point(125, 80);
            panel2.Size = new Size(200, 150);
            Label label3 = new Label();
            label3.AutoSize = true;
            label3.Text = "Text";
            label3.Location = new Point(1, 1);
            panel2.Controls.Add(label3);
 
            return panel2;
        }
 
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            panel2.Controls.Clear();
            panel2.Controls.Add(Stud());
        }
 
    }
}
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
10.03.2013, 01:51
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
         public Form1()
        {
            InitializeComponent();
            parent = Reg();
        }
 
 
         Panel parent = null;
         
         
 private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
                 if (radioButton1.Checked)
            {
                    parent.Controls.Add(Stud());
 
            }
            else
            {      
                     parent.Controls["Stud"].Dispose();
                     parent.Invalidate();
            }
 
        }
в метод Stud добавить код для присвоения имени панели:
C#
1
 panel2.Name= "Stud";
Добавлено через 2 минуты
и если не собираешься использовать методы во внешнем коде - поставь модификаторы на private (ну или internal).
0
11 / 11 / 3
Регистрация: 10.03.2013
Сообщений: 104
10.03.2013, 02:34  [ТС]
Все равно ничего не выходит. Сделал как подсказали. Первая панель выводится как и раньше нормально,
вторая не подает признаков жизни. Возможно, что ошибка в неправильном добавлении элементов Панель на форму?

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace БД
{
    public partial class Form1 : Form
    {
        RadioButton radioButton1 = new RadioButton();
        RadioButton radioButton2 = new RadioButton();
        Panel parent = null;
        public Form1()
        {
            InitializeComponent();
            parent = Reg();
        }
 
        public Panel Reg()
        {
            Panel panel1 = new Panel();
            panel1.Location = new Point(1, 1);
            panel1.Size = new Size(new Point(528, 247));
            Label label1 = new Label();
            label1.AutoSize = true;
            label1.Text = "Регистрация нового";
            label1.Location = new Point(8, 8);
            panel1.Controls.Add(label1);
            //RadioButton radioButton1 = new RadioButton();
            radioButton1.AutoSize = true;
            radioButton1.Text = "Студента";
            radioButton1.Location = new Point(12, 24);
            panel1.Controls.Add(radioButton1);
            //RadioButton radioButton2 = new RadioButton();
            radioButton2.AutoSize = true;
            radioButton2.Text = "Преподавателя";
            radioButton2.Location = new Point(12, 40);
            panel1.Controls.Add(radioButton2);
 
            return panel1;
        }
 
        private void регистрацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panel1.Controls.Clear();
            panel1.Controls.Add(Reg());
        }
 
        public Panel Stud()
        {
            Panel panel2 = new Panel();
            panel2.Name = "Stud";
            panel2.Location = new Point(125, 80);
            panel2.Size = new Size(200, 150);
            Label label3 = new Label();
            label3.AutoSize = true;
            label3.Text = "Text";
            label3.Location = new Point(1, 1);
            panel2.Controls.Add(label3);
 
            return panel2;
        }
 
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                parent.Controls.Add(Stud());
 
            }
            else
            {
                parent.Controls["Stud"].Dispose();
                parent.Invalidate();
            }
        }
    }
}
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
10.03.2013, 02:37
Цитата Сообщение от Yamko Посмотреть сообщение
private void регистрацияToolStripMenuItem_Click(objec t sender, EventArgs e)
* * * * {
* * * * * * panel1.Controls.Clear();
* * * * * * panel1.Controls.Add(Reg());
* * * * }
Заменить на:
C#
1
2
3
4
5
 private void регистрацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panel1.Controls.Clear();
            panel1.Controls.Add(parent);
        }
0
11 / 11 / 3
Регистрация: 10.03.2013
Сообщений: 104
10.03.2013, 02:44  [ТС]
Ничего не меняется. Добавил скрин с панелями
Миниатюры
Динамическое создание panel в panel  
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
10.03.2013, 02:53
Как понял, есть дизайнерский panel1, на него при нажатии на пункт меню кидаем Panel parent, а на parent добавляем другой дочерний Panel при нажатии на радио-кнопку и удаляем при сбрасывании. вроде должно работать. Скиньте проект.
0
11 / 11 / 3
Регистрация: 10.03.2013
Сообщений: 104
10.03.2013, 03:01  [ТС]
Есть форма и на ней меню ( ну и две панели, чтоб студия не ругалась на их отсутствие). При нажатии на
Меню\Регистрация на форме появляется первая панель с элементами (в данном случае 2 радио кнопки). при нажатии на первую кнопку правее должна появиться вторая панель, в которую дальше будут добавляться элементы ля работы с базой данных.
Вложения
Тип файла: rar БД.rar (48.0 Кб, 12 просмотров)
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
10.03.2013, 03:39
не обратил внимания, что баттоны создаются динамически. Тогда нужно добавить обработчик события CheckedChanged для каждого баттона, затем добавлять уже на родительскую. Сейчас исправлю.

Добавлено через 23 минуты
в методе Reg добавить:
C#
1
2
radioButton1.Name = "studentButton";
 radioButton1.CheckedChanged+= CheckedChanged;
Определить метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void CheckedChanged(object sender, EventArgs e)
        {
            RadioButton rbutton = parent.Controls["studentButton"] as RadioButton;
            if (rbutton.Checked)
            {    
                
                parent.Controls.Add(Stud());
                Invalidate();
            }
            else
            {
                parent.Controls["Stud"].Dispose();
                parent.Invalidate();
            }
        }
Добавлено через 1 минуту
invalidate в первом if-e можно убрать.

Добавлено через 5 минут
Советую хорошенько продумать логику, а то из за этого GUI затянете разработку на дольше, чем нужно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2013, 03:39
Помогаю со студенческими работами здесь

Динамическое заполнение элемента Panel в WinForms
Всем доброго времени. Суть задачи такова : в папке лежит несколько картинок (их число может меняться) требуется динамически создать...

Программное создание panel
ребят смотрите у меня на форме есть панель на ней есть текст бокс вот , у меня есть ввод каких то данных ,как только ввели записываем туда...

Panel поверх Panel
Необходимо чтобы при нажатии на "День 1" и "День 2" показывались кнопки "1/1, 1/2" и "2/1, 2/2" соответственно. И при нажатии...

Графическое создание класса-наследника Panel
Добрый вечер. Переделываю тут старый код на основе новых знаний, возник небольшой вопрос. Допустим, нужно создать свою панель, один...

Создание списка {чтото типа MenuStrip} (кнопок на Panel)
Подскажите пожалуйста, можно ли сделать похожый список средствами winform; Тоже нужно сделать похожий список com портов... Хотел сделать...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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