Практична робота - програма з використанням події Paint.
Практикум
Відео-інструкція
Підсумки
Для наочної демонстрації методики обробки події Paint ми підготуємо найпростіший додаток PaintApp, який малює у своєму вікні текстовий рядок та геометричні фігури.
Перш за все, створіть проект PaintApp.
Далі виділіть у вікні дизайнера форму Form1 та відкрийте вкладку подій для цієї форми, знайдіть на вкладці рядок події Paint
Клацніть його двічі лівою кнопкою миші на рядку події Paint. В результаті буде створено обробник події Form1_Paint. Цей обробник буде отримувати управління щоразу, коли з тих чи інших причин виникне необхідність перемальовувати вміст вікна нашого додатка.
Ось у якому вигляді буде створено обробник події Paint мовою Visual Basic:
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
End Sub
У якому вигляді буде створено обробник події Paint мовою Visual C#:
private void Form1_Paint(object sender, PaintEventArgs e)
{
}
Оброблювачу Form1_Paint передаються два параметри.
Через перший параметр передається посилання на об'єкт, що спричинив подію. У нашому випадку це буде посилання на форму Form1.
Що ж до другого параметра, через нього передається посилання об'єкт класу PaintEventArgs. Цей об'єкт має дві властивості, доступні тільки для читання - Graphics і ClipRectangle.
Клас Graphics Вам вже знайомий — він є контекстом відображення, необхідним для малювання тексту та геометричних фігур.
Через властивість ClipRectangle передаються межі області, яку має перемалювати обробник події Paint. Ці межі передаються як об'єкта класу Rectangle. Властивості цього класу Left, Right, Width та Height, поряд з іншими властивостями, дозволяють визначити розташування та розміри області.
Отже, давайте відредагуємо вихідний текст програми PaintApp таким чином, щоб у його вікні було намальовано текстовий рядок, прямокутник та еліпс.
Створення програми мовою Visual Basic
Перш за все, створіть у класі Form1 поле text класу string, в якому буде зберігатися текстовий рядок, що відображається:
Public Class Form1
Dim strText As String
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
End Sub
End Class
Додайте також рядок ініціалізації згаданого поля. Це можна зробити створивши обробник події Load форми:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
strText = "Demo paint"
End Sub
І, нарешті, змініть вихідний текст обробника події Form1_Paint наступним чином:
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
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
Тут у тілі обробника Form1_Paint ми визначили локальну змінну g класу Graphics, призначену для зберігання контексту відображення. Ця змінна ініціалізується за допомогою значення, отриманого з характеристики Graphics першого параметра обробника Form1_Paint:
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);
}
}
}
Після вивчення матеріалів уроку ви повинні надати звіт (заповнити просту форму).