netlib.narod.ru | < Назад | Оглавление | Далее > |
Правильнее всего рассматривать события на примерах. На практике при обработке события Paint вам в первую очередь потребуется знакомство с PaintEventHandler — делегатом, определенным в пространстве имен System.Windows.Forms одним оператором, который имеет такой вид (в синтаксисе С#):
public delegate void PaintEventHandler(object objSender, PaintEventArgs pea);
Если вам кажется, что это прототип функции, вы недалеки от истины. Вторым параметром является класс PaintEventArgs, также определенный в пространстве имен System.Windows.Forms — вскоре мы его рассмотрим.
Для обработки события Paint одной из программ, приведенных ранее в этой главе, нужно определить в классе статический метод с такими же параметрами и таким же типом возвращаемого значения, что и у делегата PaintEventHandler:
static void MyPaintHandler(object objSender, PaintEventArgs pea) { . . . }
Затем этот обработчик события подключается к событию Paint класса Form посредством специальной синтаксической конструкции:
form.Paint += new PaintEventHandler(MyPaintHandler);
Paint — это событие, определенное в классе Control и, благодаря наследованию, входящее в класс Form. Единственными двумя операторами, применимыми к Paint, являются операторы присваивания += и -=. Оператор += устанавливает обработчик события, подключая метод к событию. Его синтаксис:
объект.событие += new делегат(метод)
При отключении метода от события используется такой же синтаксис, но с оператором -=:
объект.событие -= new делегат(метод)
Однако отключение метода от события требуется редко. Обычно обработчик события устанавливается и никогда не отключается от события.
Два параметра обработчика события Paint — объект, который я назвал objSender, и класс PaintEventArgs, для которого я использовал сокращенное название pea. Первый параметр содержит ссылку на объект, к которому применяется событие Paint; в нашем случае это объект form. Данный объект называется отправителем (sender), так как событие исходит от этого объекта.
Класс PaintEventArgs определен в пространстве имен System.Windows.Forms. Он содержит два свойства, Graphics и ClipRectangle, доступные только для чтения:
Свойства PaintEventArgs
Тип | Свойство | Доступ | Описание |
Graphics | Graphics | Чтение | Крайне важный объект графического вывода |
Rectangle | ClipRectangle | Чтение | Недействительный прямоугольник |
Свойство Graphics содержит экземпляр класса Graphics, определенного в пространстве имен System.Drawing. Graphics — важнейший класс библиотеки Windows Forms, по важности не уступающий Form. Этот класс служит для рисования графики и вывода текста на форме. В пространстве имен System.Drawing реализована система графического программирования GDI+. Это усовершенствованная версия интерфейса GDI (Graphics Device Interface, интерфейс графического устройства) системы Windows. О свойстве ClipRectangle рассказывается в главе 4.
В подавляющем большинстве программ этой книги вы будете встречать инструкцию:
Graphics grfx = pea.Graphics;
в первой строке обработчика события Paint. Свой объект типа Graphics вы можете называть как угодно. Кто-то из программистов пишет graphics строчными буквами, но это название настолько длинное, что некоторые просто используют букву g. Я выбрал компромиссный подход.
Прежде чем углубиться в этот новый материал, рассмотрим программу, содержащую обработчик события Paint.
PaintEvent.cs
//--------------------------------------------- // PaintEvent.cs (C) 2001 by Charles Petzold //--------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; class PaintEvent { public static void Main() { Form form = new Form(); form.Text = "Paint Event"; form.Paint += new PaintEventHandler(MyPaintHandler); Application.Run(form); } static void MyPaintHandler(object objSender, PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.Clear(Color.Chocolate); } }
После создания формы в методе Main, метод MyPaintHandler подключается к событию Paint формы. В обработчике события программа получает в составе класса PaintEventArgs объект Graphics и вызывает метод Clear этого объекта. Clear — это простой метод (возможно, самый простой из методов рисования), определенный в классе Graphics.
Методы класса Graphics (выборочно)
Метод | Описание |
void Clear(Color clr) | Закрашивает всю клиентскую область заданным цветом |
Параметр метода — объект типа Color, который я подробней рассмотрю в главе 3. Как я упоминал при рассмотрении программы FormProperties, показанной выше, самый простой путь получить цвет — указать одно из 141 имени цветов, являющихся статическими свойствами структуры Color.
Чтобы получить представление о частоте, с которой программа получает события Paint, попробуйте вставить в MyPaintHandler инструкцию:
Console.WriteLine("Paint Event");
Кроме того, в следующей главе будет показана пара программ, визуально демонстрирующих частоту возникновения событий Paint.
С этого момента все программы для Windows Forms этой книги будут содержать в начале по меньшей мере три инструкции using.
using System; using System.Drawing; using System.Windows.Forms;
Вообще говоря, эти инструкции — минимум, необходимый любому нетривиальному приложению Windows Forms.
Можно заметить связь между этими тремя инструкциями using и тремя DLL, ссылки на которые указывались при компиляции программы. Для программистов на С или C++ естественно думать, что инструкции using идентичны директивам препроцессора #include. Но это не так! Инструкции using ближе к инструкциям With языка Visual Basic. Они существуют только для того, чтобы не требовалось вводить полные имена классов. Все, что в программах на С и C++ обычно делают файлы заголовков (например, объявление типов, функций и классов), здесь обеспечивают DLL, указываемые как ссылки (references), и те же DLL связываются с запускаемой программой для реализации этих классов.
netlib.narod.ru | < Назад | Оглавление | Далее > |