Практическое руководство. Рисование линии в Windows Forms
В этом примере на форме рисуется линия. Как правило, при рисовании на форме вы обрабатываете событие формы Paint и выполняете рисование с помощью свойства Graphics объекта PaintEventArgs, как показано в этом примере
Пример
Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0)); e.Graphics.DrawLine(pen, 20, 10, 300, 100);
Dim pen As New Pen(Color.FromArgb(255, 0, 0, 0)) e.Graphics.DrawLine(pen, 20, 10, 300, 100)
Компиляция кода
Предыдущий пример предназначен для работы с Windows Forms, и для него необходим объект PaintEventArgs e , передаваемый в качестве параметра обработчику событий Paint.
Отказоустойчивость
Всегда следует вызывать Dispose для любых объектов, использующих системные ресурсы, например Pen.
См. также
- DrawLine
- OnPaint
- Приступая к программированию графики
- Рисование линий и фигур с помощью пера
- Объекты Graphics и Drawing в Windows Forms
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Практическое руководство. Создание объектов Graphics для рисования
Перед тем, как начать заниматься рисованием линий и фигур, отрисовкой текста или отображением изображений и управления ими с помощью GDI+, необходимо создать объект Graphics. Объект Graphics представляет собой поверхность рисования GDI+ и используется для создания графических изображений.
Существует два этапа работы с графикой:
- Создание объекта Graphics.
- Использование объекта Graphics для рисования линий и фигур, отрисовки текста или отображения изображений и управления ими.
Создание графического объекта
Графический объект можно создать несколькими способами.
Как создать графический объект
- Получите ссылку на графический объект как часть PaintEventArgs события формы или элемента управления Paint. Обычно ссылка на графический объект таким образом берется при создании кода рисования для элемента управления. Аналогичным образом можно также получить графический объект в качестве свойства PrintPageEventArgs при обработке события PrintPage для объекта PrintDocument. или
- Вызовите метод элемента управления или формы CreateGraphics, чтобы получить ссылку на объект Graphics, представляющий собой область рисования этого элемента управления или формы. Используйте этот метод, если необходимо нарисовать на форме или элементе управления, которые уже существуют. или
- Создайте объект Graphics из любого объекта, наследуемого от Image. Этот вариант подходит если вы хотите изменить уже существующее изображение. Необходимые действия будут более подробно описаны в следующих разделах.
PaintEventArgs в обработчике событий Paint
При программировании PaintEventHandler для элементов управления или PrintPage для объекта PrintDocument, графический объект предоставляется в качестве одного из свойств PaintEventArgs или PrintPageEventArgs.
Получение ссылки на графический объект из PaintEventArgs в событии Paint
- Объявите объект Graphics.
- Назначьте переменную для ссылки на объект Graphics, переданный как часть PaintEventArgs.
- Введите код, чтобы нарисовать форму или элемент управления. В следующем примере показано, как ссылаться на объект Graphics из PaintEventArgs в событии Paint :
Private Sub Form1_Paint(sender As Object, pe As PaintEventArgs) Handles _ MyBase.Paint ' Declares the Graphics object and sets it to the Graphics object ' supplied in the PaintEventArgs. Dim g As Graphics = pe.Graphics ' Insert code to paint the form here. End Sub
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs pe) < // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics g = pe.Graphics; // Insert code to paint the form here. >
private: void Form1_Paint(System::Object ^ sender, System::Windows::Forms::PaintEventArgs ^ pe) < // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics ^ g = pe->Graphics; // Insert code to paint the form here. >
Метод CreateGraphics
Также можно воспользоваться методом элемента управления или формы CreateGraphics, чтобы получить ссылку на объект Graphics, представляющий собой область рисования этого элемента управления или формы.
Создание графического объекта с помощью метода CreateGraphics
- Вызовите метод CreateGraphics для формы или элемента управления, на которых требуется отрисовка графики.
Dim g as Graphics ' Sets g to a Graphics object representing the drawing surface of the ' control or form g is a member of. g = Me.CreateGraphics
Graphics g; // Sets g to a graphics object representing the drawing surface of the // control or form g is a member of. g = this.CreateGraphics();
Graphics ^ g; // Sets g to a graphics object representing the drawing surface of the // control or form g is a member of. g = this->CreateGraphics();
Создание из объекта изображения
Кроме того, можно создать графический объект из любого объекта, производного от класса Image.
Как создать графический объект на основе изображения
- Вызовите метод Graphics.FromImage, указав имя переменной изображения, из которой требуется создать объект Graphics. В приведенном ниже примере показано использование объекта Bitmap:
Dim myBitmap as New Bitmap("C:\Documents and Settings\Joe\Pics\myPic.bmp") Dim g as Graphics = Graphics.FromImage(myBitmap)
Bitmap myBitmap = new Bitmap(@"C:\Documents and Settings\Joe\Pics\myPic.bmp"); Graphics g = Graphics.FromImage(myBitmap);
Bitmap ^ myBitmap = gcnew Bitmap("D:\\Documents and Settings\\Joe\\Pics\\myPic.bmp"); Graphics ^ g = Graphics::FromImage(myBitmap);
Объекты Graphics можно создавать только из неиндексированных файлов формата .bmp, например 16-разрядных, 24-разрядных и 32-разрядных. Каждый пиксель неиндексированных файлов .bmp содержит цвет. В индексированных .bmp файлах же каждый пиксель содержит индекс таблицы цветов.
Рисование и обработка фигур и изображений
Объект Graphics после создания может использоваться для рисования линий и фигур, отрисовки текста или отображения изображений и управления ими. Вот основные объекты, которые используются с объектом Graphics:
- Класс Pen — используется для рисования линий, структурирования фигур или отрисовки других геометрических представлений.
- Класс Brush — используется для заполнения областей графики, в частности для заполненных фигур, изображений или текста.
- Класс Font — предоставляет собой описание фигур, используемых при отрисовке текста.
- Структура Color — представляет различные отображаемые цвета.
Использование созданного графического объекта
- Обратитесь к соответствующему объекту, указанному выше, чтобы нарисовать необходимые объекты. Дополнительные сведения см. в следующих разделах:
| Отрисовка | Смотрите |
|---|---|
| Позиции | Практическое руководство. Рисование линии в Windows Forms |
| Фигуры | Практическое руководство. Рисование контурной фигуры |
| Текст | Практическое руководство. Рисование текста в Windows Forms |
| изображения; | Практическое руководство. Прорисовка изображений с использованием GDI+ |
См. также
- Приступая к программированию графики
- Объекты Graphics и Drawing в Windows Forms
- Линии, кривые и фигуры
- Практическое руководство. Прорисовка изображений с использованием GDI+
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Пример рисования в C#. «Кораблик»

1) Создайте приложение Windows Forms, namespace = «Кораблик».
2) Размер формы задайте 900х500, на ней разместите визуальный объект для рисования pictureBox1, измените его свойство Dock = Fill; (он займет все пространство формы).
3) Кликнув на компоненте, вы создадите событие pictureBox1.Click и форму для метода обработки этого события pictureBox1_Click ();
4) Не забудьте добавить библиотеку System.Drawing. Ненужные библиотеки можно удалить (нужны всего три: System, System.Windows.Forms и System.Drawing).
5) В окне кода файла Form1.cs получите следующий текст:
using System; using System.Drawing; using System.Windows.Forms; namespace Кораблик < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void pictureBox1_Click(object sender, EventArgs e) < . >> >
Теперь нам осталось только написать обработчик события, добавленный нами метод pictureBox1_Click ( ), для чего вставим следующие операторы с комментариями:
// Объявляем объект "g" класса Graphics и предоставляем // ему возможность рисования на pictureBox1: Graphics g = pictureBox1.CreateGraphics(); g.Clear(Color.Turquoise); // Создаем объекты-кисти для закрашивания фигур SolidBrush myCorp = new SolidBrush(Color.DarkMagenta); SolidBrush myTrum = new SolidBrush(Color.DarkOrchid); SolidBrush myTrub = new SolidBrush(Color.DeepPink); SolidBrush mySeа = new SolidBrush(Color.Blue); //Выбираем перо myPen желтого цвета толщиной в 2 пикселя: Pen myWind = new Pen(Color.Yellow, 2); // Закрашиваем фигуры g.FillRectangle(myTrub,300,125,75,75); // 1 труба (прямоугольник) g.FillRectangle(myTrub,480,125,75,75); // 2 труба (прямоугольник) g.FillPolygon(myCorp, new Point[] // корпус (трапеция) new Point(100,300),new Point(700,300), new Point(700,300),new Point(600,400), new Point(600,400),new Point(200,400), new Point(200,400),new Point(100,300) > ); g.FillRectangle(myTrum, 250, 200, 350, 100); // палуба (прямоугольник) // Море - 12 секторов-полуокружностей int x = 50; int Radius = 50; while (x g.FillPie(mySeа, 0 + x, 375, 50, 50, 0, -180); x += 50; > // Иллюминаторы for (int y = 300; y g.DrawEllipse(myWind, y, 240, 20, 20); // 6 окружностей >

В этом примере мы использовали методы класса Graphics: FillRectangle(), FillPolygon(), FillPie() и DrawEllipse(). Найдите их в таблице предыдущей статьи. Кроме того мы используем структуры Point; oбъекты-кисти класса SolidBrush; объект-перо класса Pen. Для рисования волн моря использовался цикл while, для иллюминаторов — цикл for. Полигон задается массивом точек для соединения их сплошной ломаной.
И все, программу можно проверять. Кликнув в окне, сможем увидеть наш кораблик:
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Как нарисовать пиксель в picture box?
Ковыряюсь в Windows Forms. По итогу мне нужно будет имея какую-то функцию (математическую) строить график. В связи с этим хочется понять, как изобразить на форме точку.
Отслеживать
28.8k 12 12 золотых знаков 59 59 серебряных знаков 118 118 бронзовых знаков
задан 12 окт 2017 в 20:26
41 4 4 бронзовых знака
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
С помощью Bitmap, а именно функцией Bitmap.SetPixel().
Но если вы хотите рисовать графики, то это не лучший способ. В Windows Forms есть элемент Chart. Пользоваться им можно примерно так:
chart->Series[0]->Points->AddXY(x, f(x));
Там можно настроить тип интерполирования функции. Думаю, spline будет наиболее подходящий для вас.
Отслеживать
ответ дан 12 окт 2017 в 21:39
1,037 7 7 серебряных знаков 15 15 бронзовых знаков
Этот ответ был в английском so
e.Graphics.FillRectangle(aBrush, x, y, 1, 1);
Отслеживать
ответ дан 12 окт 2017 в 21:40
HasmikGaryaka HasmikGaryaka
2,447 9 9 серебряных знаков 17 17 бронзовых знаков
В Windows Forms для построения графиков используется инструмент Chart. Для выбора типа «График» выберите в Properties -> Series -> Revenue property -> ChartType. В выпадающем списке выберите необходимый тип графика. Методы Chart рассмотрим на примере следующего кода по построению функций косинуса и синуса с комментариями:
private void buttonCalc_Click(object sender, EventArgs e) < // Считываем с формы требуемые значения double Xmin = double.Parse(textBoxXmin.Text); double Xmax = double.Parse(textBoxXmax.Text); double Step = double.Parse(textBoxStep.Text); // Количество точек графика int count = (int)Math.Ceiling((Xmax - Xmin) / Step) + 1; // Массив значений X – общий для обоих графиков double[] x = new double[count]; // Два массива Y – по одному для каждого графика double[] y1 = new double[count]; double[] y2 = new double[count]; // Расчитываем точки для графиков функции for (int i = 0; i < count; i++) < // Вычисляем значение X x[i] = Xmin + Step * i; // Вычисляем значение функций в точке X y1[i] = Math.Sin(x[i]); y2[i] = Math.Cos(x[i]); >// Настраиваем оси графика chart1.ChartAreas[0].AxisX.Minimum = Xmin; chart1.ChartAreas[0].AxisX.Maximum = Xmax; // Определяем шаг сетки chart1.ChartAreas[0].AxisX.MajorGrid.Interval = Step; // Добавляем вычисленные значения в графики chart1.Series[0].Points.DataBindXY(x, y1); chart1.Series[1].Points.DataBindXY(x, y2); >