Графічні служби GDI+ доступні через простір імен System.Drawing. Перш ніж використовувати графічні методи класу System.Drawing.Graphics для малювання примітивних фігур, ви повинні у вашому коді створити об'єкти Graphics (Область малювання), Реn (Перо) і Brush (Кисть).
Об'єкт Graphics (Область малювання)
Об'єкт Graphics (Область малювання) дозволяє вибрати в якості області малювання певний елемент управління і володіє методами малювання графічних фігур.Об'єкт Graphics можна створити трьома різними способами.
Перший спосіб полягає у використанні методу CreateGraphics () форми або елемента управління, на якому треба відобразити графіку. Зазвичай в якості області малювання вибирається розміщене на формі графічне поле (наприклад, PictureBox1):
Другий спосіб використовується для створення растрових зображень, які можна зберегти як графічний файл. Найчастіше тут мається на увазі властивість Image форми або елемента управління (наприклад, PictureBox1.Image).
Третій спосіб використовується у події Paint форми або елемента управління. Ця подія відбувається при їх створенні або оновленні.
Об'єкт Pen (Перо)
У класі Graphics є безліч різних методів, призначених для малювання найрізноманітніших геометричних фігур, таких як лінії, прямокутники, овали та кола, багатокутники, криві Безьє і т.д. Об'єкт Pen призначений для визначення таких параметрів контура фігури, як її ширина і колір.Об'єкт Brush (Кисть)
Об'єкт Brush (Кисть) визначає колір і стиль зафарбовування прямокутників, кіл і інших замкнутих фігур.Проект PaintApp - приклад обробки події Paint
Оброблювачу Form1_Paint передаються два параметри.
Через перший параметр передається посилання на об'єкт, що спричинив подію. У нашому випадку це буде посилання на форму Form1.
Що ж до другого параметра, через нього передається посилання об'єкт класу PaintEventArgs. Цей об'єкт має дві властивості, доступні тільки для читання - Graphics і ClipRectangle.
Клас Graphics Вам вже знайомий — він є контекстом відображення, необхідним для малювання тексту та геометричних фігур.
Через властивість ClipRectangle передаються межі області, яку має перемалювати обробник події Paint. Ці межі передаються як об'єкта класу Rectangle. Властивості цього класу Left, Right, Width та Height, поряд з іншими властивостями, дозволяють визначити розташування та розміри області.
Отже, давайте відредагуємо вихідний текст програми PaintApp таким чином, щоб у його вікні було намальовано текстовий рядок, прямокутник та еліпс.
Створення програми мовою Visual Basic
Перш за все, створіть у класі Form1 поле text класу string, в якому буде зберігатися текстовий рядок, що відображається:Додайте також рядок ініціалізації згаданого поля. Це можна зробити створивши обробник події Load форми:
Dim g = e.Graphics
g.Clear(Color.White)
g.DrawString(strText, New Font("Helvetica", 15), Brushes.Black, 0, 0)
g.DrawRectangle(New Pen(Brushes.Black, 2), 10, 30, 200, 100)
g.DrawEllipse(New Pen(Brushes.Black, 2), 150, 120, 100, 130)
End Sub
Dim g = e.Graphics
Отримавши контекст відображення, наш обробник події Paint може малювати у вікні все, що завгодно.
Спочатку ми зафарбовуємо вікно білим кольором, викликаючи для цього метод Clear, визначений у класі Graphics:
g.Clear(Color.White)
У такий спосіб ми можемо зафарбувати фон, колір якого заданий для форми як BackColor.
Далі ми викликаємо методи DrawString, DrawRectangle та DrawEllipse, також визначені у класі Graphics:
g.DrawString(strText, New Font("Helvetica", 15), Brushes.Black, 0, 0)
g.DrawRectangle(New Pen(Brushes.Black, 2), 10, 30, 200, 100)
g.DrawEllipse(New Pen(Brushes.Black, 2), 150, 120, 100, 130)
Перший малює текстовий рядок у верхній частині вікна, а два інших — прямокутник і еліпс, відповідно.
Слід звернути увагу на особливості системи координат: лівий верхній кут області малювання - це позиція (0,0), Координата x зростає зліва направо, а координата y - зверху вниз.
Створення програми мовою Visual C#
На відміну від Visual Basic у класі Form1 поле класу string можна назвати text. У Visual Basic так не можна, слово text позначає властивість форми.
Іншою відмінністю є те, що рядок ініціалізації цієї змінної можна додати до конструктора класа Form1. Тобто не потрібно програмувати обробник події Load форми.
Отож, на Visual C# код буде таким:
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 PaintAppCS
{
public partial class Form1 : Form
{
public string text;
public Form1()
{
InitializeComponent();
text = "Demo paint";
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
g.DrawString(text, new Font("Helvetica", 15), Brushes.Black, 0, 0);
g.DrawRectangle(new Pen(Brushes.Black, 2), 10, 30, 200, 100);
g.DrawEllipse(new Pen(Brushes.Black, 2), 150, 120, 100, 130);
}
}
}
--------------------------------
Використані джерела:https://ua.waykun.com/articles/grafika-v-visual.php
http://um.co.ua/10/10-9/10-92602.html
https://www.cyberforum.ru/windows-forms/thread180793.html
https://www.frolov-lib.ru/books/msnet/c_sharp2/ch10.html