Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
#1

Создание панели при нажатии на кнопку

15.12.2014, 10:56. Просмотров 4527. Ответов 54
Метки нет (Все метки)

Доброго времени суток.
Необходимо разработать программу с двумя кнопками на форме.
При нажатии на первую на форму добавляется одна панель (Panel).
При нажатии на вторую кнопку в каждую панель добавляется поле ввода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2014, 10:56
Ответы с готовыми решениями:

Как сделать, чтобы при нажатии на кнопку, Label добавлялся в низ панели?
Здравствуйте. Есть проблема, не знаю как решить. Подскажите пожалуйста. Суть...

Создание label при нажатии на кнопку
Нужна помощь. Знаю, что задание "лоховские", но помогите сделать так, чтобы при...

Создание всплывающей подсказки при нажатии на любую кнопку
Необходимо создать всплывающую подсказку, которая будет всплывать при нажатии...

Создание tabControl по нажатии на кнопку
Привет всем! подскажите пжл как в WPF сделать так чтобы при нажатии на одну...

При нажатии мышки в панели на месте нажатия рисуется точка
Учусь рисовать в шарпе с помощью методов GDI+. Попробовал делать всякие фигуры...

54
nio
5953 / 3359 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
15.12.2014, 11:17 #2
Ответы на 7 самых частых вопросов по WinForms
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 11:21  [ТС] #3
Цитата Сообщение от nio Посмотреть сообщение
Ответы на 7 самых частых вопросов по WinForms
Пользуясь пунктом 4 из этой темы можно создать панель (хотя я и тут умудрюсь что-нибудь не понять), но как добавить поле ввода на все панели я не могу себе представить.
0
nio
5953 / 3359 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
15.12.2014, 11:38 #4
Цитата Сообщение от Norbert96 Посмотреть сообщение
как добавить поле ввода на все панели я не могу себе представить.
для формы this.Controls предоставит коллекцию всех элементов управления, находящихся на этой форме. Обычный проход циклом, выявление что из них является Панелью. И если панель найдена, добавить на неё поле ввода.

Добавлено через 56 секунд
ссылка та же, пункт 7
1
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 11:42  [ТС] #5
Я учту это. Благодарю.
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 12:57 #6
Создаём панель
C#
1
Panel panel1 = new Panel();
создаём текстовое поле
C#
1
TextBox texbox1 = new TextBox();
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 13:03  [ТС] #7
Цитата Сообщение от ivan r Посмотреть сообщение
Panel panel1 = new Panel();
Цитата Сообщение от ivan r Посмотреть сообщение
TextBox texbox1 = new TextBox();
Здравствуйте.
Это понятно, что при клике на кнопку нужно создать новый экземпляр.
Собственно, пока что на этом этапе и встала работа.
Пробовал дальше добавить вручную несколько свойств, включая this.Controls.Add(panel) - вычитал, что это необходимо для отображения на форме, но пока что все безрезультатно.
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 13:17 #8
Norbert96, Здравствуй
C#
1
2
TextBox textBox1 = new TextBox();
panel1.Controls.Add(textBox1);
Добавлено через 1 минуту
и + - при создании панели она принимает свойства формы я про BAckColor так что проше сразу сменить цвет, что бы убедиться на результат.
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 13:27  [ТС] #9
Цитата Сообщение от ivan r Посмотреть сообщение
TextBox textBox1 = new TextBox();
panel1.Controls.Add(textBox1);
Не понимаю. Разве за это отвечает не другая кнопка?
То есть, panel же будет работать только с 1 кнопкой, а textbox со второй.
Вот имеющийся набросок:
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 partial class Form1 : Form
    {
        int countElement = 0;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
                Panel pn = new Panel();
                pn.Name = "Panel" + countElement;
           //   pn.Location = 
                pn.Size = new Size(50, 50);
                this.Controls.Add(pn);
                countElement++;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
                TextBox textBox1 = new TextBox();
                pn.Controls.Add(textBox1);
        }
    }
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 13:35 #10
Norbert96,
C#
1
2
3
4
5
6
private void button1_Click(object sender, EventArgs e)
Panel pn = new Panel();
pn.Name = "Panel" + countElement;
pn.Size = new Size(50, 50);
this.Controls.Add(pn);
countElement++;
создал панель, задал размер и зачем то еще вывел панель...
C#
1
2
3
private void button2_Click(object sender, EventArgs e)
TextBox textBox1 = new TextBox();
pn.Controls.Add(textBox1)
;

добавил текстовое поле.
Я бы сделал так.

C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
{
Panel pn = new Panel();             
                pn.Size = new Size(50, 50);
}
и оставил бы так же
C#
1
2
3
4
5
private void button2_Click(object sender, EventArgs e)
        {
                TextBox textBox1 = new TextBox();
                pn.Controls.Add(textBox1);
        }
1
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 13:39  [ТС] #11
Цитата Сообщение от ivan r Посмотреть сообщение
C#
1
2
3
4
5
private void button2_Click(object sender, EventArgs e)
{
    TextBox textBox1 = new TextBox();
    pn.Controls.Add(textBox1);
}
Имя "pn" отсутствует в текущем контексте
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 13:42 #12
Norbert96, напиши
C#
1
Panel pn = new Panel();
после
C#
1
2
3
public partial class Form1 : Form
    {
Panel pn = new Panel();
Добавлено через 20 секунд
а в кнопке пиши все свойства которые нужны.
1
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 13:50  [ТС] #13
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public partial class Form1 : Form
    {
        Panel pn = new Panel();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            pn.Size = new Size(100, 100);
            pn.BackColor = Color.Black;
       //   pn.Location = 
            this.Controls.Add(pn);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            TextBox textBox1 = new TextBox();
            pn.Controls.Add(textBox1);
        }
    }
0
Изображения
 
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 13:54  [ТС] #14
Цитата Сообщение от ivan r Посмотреть сообщение
а в кнопке пиши все свойства которые нужны.
Спасибо.
Осталось (как мне кажется) определиться с локацией панелей на форме.
Через локацию мыши тут не получится (или будет неудобно).
Есть вариант с созданием цикла (что-то вроде (pn.Location = x, y) + переменная, которая увеличивается с каждой панелью) но я даже не уверен, что так можно сделать.
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 13:59 #15
Norbert96,
C#
1
pn.Location = new Point(x, y);
а мышью перетаскивать тоже можно, у меня даже исходник есть в котором можно перетаскивать кнопку как угодно, там только останется имена сменить и всё. Если надо скину.
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 14:06  [ТС] #16
Цитата Сообщение от ivan r Посмотреть сообщение
pn.Location = new Point(x, y);
Не хотел затруднять вас с поиском исходника, и сделал вот так
C#
1
2
3
4
5
6
7
8
9
10
        private void button1_Click(object sender, EventArgs e)
        {
            Random ch = new Random();
            int x = ch.Next(0, 250);
            int y = ch.Next(0, 250);
            pn.Size = new Size(100, 100);
            pn.BackColor = Color.Black;
            pn.Location = new Point(x, y);
            this.Controls.Add(pn);
        }
Но увидел, что он работает лишь с одной панелью (она просто перемещается с одной точки на другую).
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 14:10 #17
Norbert96, а может проше создать еще одну кнопку которая задает позицию?

Добавлено через 19 секунд
из texboxса
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 14:13  [ТС] #18
Цитата Сообщение от ivan r Посмотреть сообщение
а может проше создать еще одну кнопку которая задает позицию?
Исходя из задания, я понял то, что с позицией панели можно сильно не заморачиваться.
Проблема же в том, что каждый раз при нажатии на кнопку должна создаваться новая панель.
Или я вас не так понял, и вы это и имели в виду?
0
ivan r
31 / 31 / 12
Регистрация: 18.10.2014
Сообщений: 327
15.12.2014, 14:41 #19
Norbert96, посмотрите Динамическое создание элементов интерфейса
0
Norbert96
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 102
15.12.2014, 14:57  [ТС] #20
Цитата Сообщение от ivan r Посмотреть сообщение
посмотрите Динамическое создание элементов интерфейса
Я так понимаю, там использовали цикл for, и создавали определенное количество label элементов.
К сожалению, до конца так и не смог разобраться (уже на свойстве Length потерял нить), и придется проштудировать еще хотя бы несколько схожих тем, но спасибо за наводку.
0
15.12.2014, 14:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2014, 14:57

Ошибка при нажатии на кнопку!
У меня прога калькулятор матриц. Если не внесены данные и нажать на кнопку...

Событие при нажатии на кнопку
Здравствуйте! Извините за немного нубский вопрос. Возможно ли для элемента...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru