Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/313: Рейтинг темы: голосов - 313, средняя оценка - 4.72
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56

Рисование в Form геометрических фигур

29.10.2014, 21:15. Показов 65689. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно нарисовать в Form геометрическую фигуру. Я думаю что рисовать нужно на каком-то объекте я взял PictureBox и попытался рисовать на нем, но вышли ошибки, может я что-то не так сделал и есть другие объекты для рисования на них? И еще после того как я нарисовал пробную линию она через несколько секунд исчезла, как сделать чтобы нарисованный объект не исчезал.

Вот мой код:

C#
1
2
3
4
5
6
7
8
private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics(); 
            {
                g.DrawLine(Pens.Black, new Point(0, 0), new Point(20, 100));
 
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2014, 21:15
Ответы с готовыми решениями:

Рисование геометрических фигур
как реализовать эту геометрическую фигуру?

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

System.Drawing рисование простых геометрических фигур и изменения их размеров
Необходимо нарисовать флаг Украины (сверху - синий, снизу - желтый), который каждые 150 мс будет увеличиваться в размерах в ширину и высоту...

32
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
29.10.2014, 23:55
Привожу код построения, например, эллипса. Аналогично можно строить прямоугольники, многоугольники и пр.

C#
1
2
3
4
5
6
7
8
9
10
11
12
Forms Code
{
 
       private void button1_Click(object sender, EventArgs e)
       {
           Pen pn = new Pen(Color.Black, 5);  // Перо для рисования
            Graphics g = CreateGraphics();
             g.DrawEllipse(pn, 200, 200, 300, 200);  //200, 200 - координаты верхнего левого угла прямоугольника, 
                                         //300, 200 - его ширина и высота. Сюда вписывается эллипс.                        
      }
 
}
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,098
30.10.2014, 00:02
Цитата Сообщение от gorbunov-anton Посмотреть сообщение
я нарисовал пробную линию она через несколько секунд исчезла, как сделать чтобы нарисованный объект не исчезал.
Цитата Сообщение от zna926 Посмотреть сообщение
Аналогично можно строить прямоугольники, многоугольники и пр.
Аналогично исчезнут

Слушайте ViterAlex, он дело говорит
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
30.10.2014, 16:14  [ТС]
Я не могу так свободно читать код без объяснения поэтому по этим ссылкам я мало что усвоил для себя. Я вот сам попытался загрузить изображение в PictureBox при загрузке Form. Но у меня не получилось скажите что я сделал не так ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        Bitmap bmp1 = new Bitmap(@"C:\Users\Антон\Desktop\Kursovoi project\fon.jpg");
 
        private void Form1_Load(object sender, System.EventArgs e)
        { pictureBox1.Image = bmp1; }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics(); 
            {
                g.DrawLine(Pens.Black, new Point(0, 0), new Point(20, 100));
 
            }
        }
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
30.10.2014, 17:40
Ошибка в твоем коде, что не указана толщина линии.
Сейчас ничего не исчезнет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
Forms Code
{
 
       private void button1_Click(object sender, EventArgs e)
       {
          Pen pn= new Pen(color.Black, 5); 
           Graphics g =CreateGraphics();       
             g.DrawLine(pn, new Point(0, 0), new Point(20, 100));
 
       }
 
}
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
30.10.2014, 20:07  [ТС]
Да не исчезает. Теперь понятно. Но мне нужно рисовать на белом фоне. А для этого я думаю надо использовать PictureBox с Bitmap.
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
30.10.2014, 21:08
Непонятно, зачем так сложно.
Установите для формы свойство BackColor белого цвета.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
30.10.2014, 21:40
Чувствую, что пора написать FAQ по рисованию на форме. Ну пока так:
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        Bitmap bmp;//Здесь рисуем
        public Form1() {
            InitializeComponent();
            /// В конструкторе формы задаёшь размер Bitmap
            /// Если PictureBox будет менять размер, то нужно использовать событие
            /// Resize, чтобы привести размер битмапа в соотвествие. Или использовать
            /// SizeMode = StretchImage. Но пока просто зададим размер
            bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
            /// Обработка нажатия на кнопку. Можно это делать через дизайнер, дважды кликнув по кнопке
            button1.Click += button1_Click;
        }
 
        void button1_Click(object sender, EventArgs e) {
            /// Здесь рисуем на битмап. А затем этот битмап назначаем свойству Image.
            /// Поскольку объекты Graphics нужно сразу уничтожать после использования,
            /// то всегда пользуемся конструкцией using. Она сама уничтожит объект при
            /// выходе.
            using (Graphics g = Graphics.FromImage(bmp)) {
                /// Рисование на белом фоне. Делаем заливку белым цветом
                g.Clear(Color.White);
                g.DrawLine(Pens.Black, 10, 10, 40, 40);
            }
            /// Назначаем наш Bitmap свойству Image
            pictureBox1.Image = bmp;
        }
 
    }
}
На форме только PictureBox и кнопка

Добавлено через 1 минуту
Цитата Сообщение от gorbunov-anton Посмотреть сообщение
у меня не получилось скажите что я сделал не так ?
Изображение ты назначил в pictureBox, а рисуешь на форме
1
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
30.10.2014, 21:51  [ТС]
Да у меня курсовая а там кнопки на сером фоне и белый экранчик на котором происходит рисование. Конечно можно в свойствах PictureBox задать белый цвет, но хотел все по умному сделать, правильно, чтобы кодом а не настройками цвет устанавливался.

Добавлено через 3 минуты
Я понимаю что рисую на форме, но для начала я хотел просто изображение загрузить и не получилось.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
30.10.2014, 22:42
Цитата Сообщение от gorbunov-anton Посмотреть сообщение
Я понимаю что рисую на форме, но для начала я хотел просто изображение загрузить и не получилось.
Почему? Не загрузилось? Ошибку выдало? Компьютер сгорел?
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
30.10.2014, 23:29  [ТС]
Ну вот например я пытаюсь просто загрузить изображение на 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
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Kursovoi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void Form1_Load(object sender, System.EventArgs e)
        {
            Size sz = new Size(this.pictureBox1.Width, this.pictureBox1.Height);
            Bitmap bmp1 = new Bitmap(@"C:\Users\Антон\Desktop\Kursovoi\fon.jpg", sz);
            pictureBox1.Image = bmp1; 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Pen pn = new Pen(Color.Black, 5);
            Graphics g = this.CreateGraphics();
            g.DrawLine(pn, new Point(0, 0), new Point(20, 100));
 
 
        }
    }
}
и он пишет:
Ошибка 1 Наиболее подходящий перегруженный метод для "System.Drawing.Bitmap.Bitmap(string , bool)" имеет несколько недопустимых аргументов C:\Users\Антон\Desktop\Kursovoi\Kursovoi \Form1.cs 23 27 Kursovoi
Ошибка 2 Аргумент "2": преобразование типа из "System.Drawing.Size" в "bool" невозможно C:\Users\Антон\Desktop\Kursovoi\Kursovoi \Form1.cs 23 82 Kursovoi
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
30.10.2014, 23:35
Правильно пишет. Потому что ты пытаешься загрузить картинку из файла и сразу указать её размер. Почему ты решил, что это возможно? Такого конструктора Bitmap не имеет. Есть отдельный конструктор по имени файла и отдельный по размеру.
При загрузке из файла, размер Bitmap будет установлен в соответствии с размерами изображения в файле
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
31.10.2014, 09:40  [ТС]
А эта конструкция что значит ?
Миниатюры
Рисование в Form геометрических фигур  
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
03.11.2014, 22:15  [ТС]
Я вот еще подумал, а что не могу я нарисовать изображение прямо на форме зачем для этого нужен picturebox ?
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
03.11.2014, 22:45
Используя рикчербокс, можно перемещать изображение на форме.
Когда то сделал 2 шарика, включил таймер и они двигались по форме, подлетая к ее краю, отражались (при этом угол падения был равен углу отражения и т.д.)
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
03.11.2014, 22:58  [ТС]
Движение можно создать и на форме заливая одну картинку поверх другой.

Почему этот код не работает?

C#
1
2
3
4
5
6
7
8
private void Form1_Load(object sender, EventArgs e)
        {
            
            Rectangle newRec=new Rectangle(50,50,100,100);
            Image newImage=Image.FromFile(@"C:\Users\Антон\Desktop\Kursovoi\fon.jpg");
            Graphics g = CreateGraphics();
            g.DrawImage(newImage, newRec);
        }
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
04.11.2014, 17:27
Очень сложно. Нужно менять координаты рикчербокса
0
2 / 2 / 1
Регистрация: 28.03.2014
Сообщений: 56
04.11.2014, 19:46  [ТС]
Кое-что у меня получилось. Оказывается причина была еще в том что я неправильно событие назвал. Надо было писать не Form1_Load а Form1_Load_1
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
04.11.2014, 22:57
Думаю, что события тут вообще не нужны. Используется, например, просто форма1, а код движения записывается в
C#
1
2
3
4
  private void timer1_Tick(object sender, EventArgs e)
  {
 
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2014, 22:57
Помогаю со студенческими работами здесь

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

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

Помощь в построение рисунков геометрических фигур
Всем привет! Помогите составить программу которая при нажатии на кнопку строит отрезок по заранее введённым координатом. Именно при нажатии...

Перемещение геометрических фигур курсором мыши
Как реализовать следующее: - Добавление на форму геометрических фигур (круг, квадрат, треугольник) - Возможность свободно перемещать их...

Конструктор для создания геометрических фигур
Можно ли обратиться к целому объекту, созданному в конструкторе? Раньше я создавала кольцо из 3 кругов, а нужно из 2: class Ring...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru