С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Drake
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 3
1

Программно создать pictureBox c нарисованным окружностями

09.05.2014, 17:55. Просмотров 1947. Ответов 4
Метки нет (Все метки)

Нужно создать заданное количество pictureBox c нарисованными там окружностями. PictureBox создаются, но без окружностей, когда попробовал нарисовать окружности на добавленные pictureBox в конструкторе, то в этом случае получилось, но с программно созданными не работает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int m = 100;
.....
private void button1_Click(object sender, EventArgs e)
{
n = Convert.ToInt32(textBox1.Text);
           PictureBox[] pictureBox = new PictureBox[n];
          Pen pen = new Pen(Color.Red, 2);
          for (int i = 0; i < pictureBox.Length; i++)
           {
              pictureBox[i] = new System.Windows.Forms.PictureBox();
              pictureBox[i].Location = new System.Drawing.Point(m, 100);
              pictureBox[i].Size = new System.Drawing.Size(50, 50);
              pictureBox[i].Name = "pictureBox" + i.ToString();
              pictureBox[i].TabIndex = i;
               pictureBox[i].TabStop = false;
               Controls.Add(pictureBox[i]);              
               m = m + 75;
           }
           foreach (PictureBox picBox in pictureBox)
           {
                   picBox.CreateGraphics().DrawEllipse(pen, new Rectangle(10, 40, 25, 25));
           }
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 17:55
Ответы с готовыми решениями:

Кликнуть по PictureBox программно
У меня на форме несколько ПикчерБоксов, которые при клике вызывают 1 функцию,...

Создание нескольких PictureBox программно
В преддверии нового года появилось желание написать программу с падающим...

Переименование элемента PictureBox программно
Здравствуйте. string resname = &quot;res&quot; + random_element.ToString(); PictureBox...

Как программно удалить picturebox
Как программно удалить, либо сделать неактивным picturebox? У меня есть два...

Как можно повернуть PictureBox программно
Есть ли какая-нибудь функция или либа?

4
ViterAlex
6838 / 3800 / 1553
Регистрация: 11.02.2013
Сообщений: 8,347
Завершенные тесты: 3
09.05.2014, 18:37 2
Лучший ответ Сообщение было отмечено Drake как решение

Решение

Не рисует, вернее не видно, что рисует, потому что после того, как ты нарисовал на нём что-то, он обновляется на форме и всё стирается. Подпиши все динамически создаваемые picturebox на одно событие Paint и в нём рисуй:
C#
1
2
3
4
pictureBox[i].Paint += (s, e)=>
{
    e.Graphics.DrawEllipse(pen, new Rectangle(10, 40, 25, 25));
};
0
nedel
618 / 607 / 358
Регистрация: 09.04.2014
Сообщений: 1,443
Завершенные тесты: 1
09.05.2014, 18:42 3
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
private void button1_Click(object sender, EventArgs e)
        {
            n = Convert.ToInt32(textBox1.Text);
 
            Bitmap image = new Bitmap(50, 50); //создадим Bitmap на котором нарисуем оружность
            using (Graphics g = Graphics.FromImage(image))
            {
               using(Pen pen = new Pen(Color.Red, 2)
               {
                  g.DrawEllipse(pen, new Rectangle(10, 40, 25, 25));
                }
            }
                for (int i = 0; i < n; i++)
                {
                    PictureBox pictureBox = new System.Windows.Forms.PictureBox();
                    pictureBox.Location = new System.Drawing.Point(m, 100);
                    pictureBox.Size = new System.Drawing.Size(50, 50);
                    pictureBox.Name = "pictureBox" + i.ToString();
                    pictureBox.TabIndex = i;
                    pictureBox.TabStop = false;
                    pictureBox.Image = image; // вставим наш Bitmap в pictureBox
                    Controls.Add(pictureBox);
                    m = m + 75;
                }
        }
0
Drake
0 / 0 / 0
Регистрация: 03.05.2014
Сообщений: 3
09.05.2014, 18:53  [ТС] 4
ViterAlex, теперь работает, благодарю!
nedel, ваш способ тоже подходит, спасибо!
0
vetall4444
0 / 0 / 0
Регистрация: 10.12.2016
Сообщений: 23
30.03.2017, 23:56 5
ViterAlex,
Цитата Сообщение от ViterAlex Посмотреть сообщение
ictureBox[i].Paint += (s, e)=>
Подскажите, пожалуйста , что означает S и е в скобках?
не получается адаптировать код под себя

Добавлено через 35 минут
Точнее,я не понимаю,как подписаться к событию.
Мне выдает, что я выхожу за границы массива
0
30.03.2017, 23:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2017, 23:56

Как обращаться к PictureBox созданным программно?
Тут они создаются. class Block { int l; int blockLength...

Обработка событий при программно созданных PictureBox
Здравствуйте. У меня возникла следующая проблема: Я программно создаю...

Нужно добавить программно созданный PictureBox в контролы
Всем привет. Задача такая: нужно добавить программно созданный PictureBox в...


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

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

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