Скачать презентацию Лекция 9 Windows Forms Изменение параметров рамки Скачать презентацию Лекция 9 Windows Forms Изменение параметров рамки

Lection9_C.ppt

  • Количество слайдов: 33

Лекция 9 Windows Forms Лекция 9 Windows Forms

Изменение параметров рамки • Свойства формы позволяют устанавливать различные параметры рамки. При этом меняется Изменение параметров рамки • Свойства формы позволяют устанавливать различные параметры рамки. При этом меняется не только ее внешний вид, но и способности окна к изменению размеров • Для изменения параметров рамки используется свойство Border. Style класса Form, которому присваиваются значения из перечисления Form. Border. Style. Возможные значения свойства Border. Style приведены далее.

None Рамка и заголовок отсутствуют. Fixed. Single То же самое, что и Fixed. Dialog. None Рамка и заголовок отсутствуют. Fixed. Single То же самое, что и Fixed. Dialog. Fixed 3 D Имеет «объемный» вид, Fixed. Dialog Рекомендуется использовать в диалоговых окнах. Используется по умолчанию. Sizable Fixed. Tool. Window Маленький заголовок, меню управления отсутствует. Sizable. Tool. Window То же, что и Fixed. Tool. Window, но с рамкой, позволяющей изменять размер.

 • При использовании стиля Form. Border. Style. Sizable форма показывается с заголовком; • • При использовании стиля Form. Border. Style. Sizable форма показывается с заголовком; • в заголовке слева находится кнопка меню управления, затем идет текст заголовка, затем идут кнопки свертывания/развертывания и справа — кнопка закрытия. • В стилях Fixed. Tool. Window и Sizable. Tool. Window (инструментальное окно) заголовок имеет меньшие размеры, а кнопок управления, свертывания/ развертывания нет, • Стиль Form. Border. Style Fixed. Single не позволяет пользователю изменять размер формы.

using System. Windows. Forms; using System. Drawing; public class Border. Form : Form { using System. Windows. Forms; using System. Drawing; public class Border. Form : Form { public static void Main( string[] args ) { Border. Form my. Form = new Border. Form(); my. Form. Back. Color = Color. Steel. Blue; my. Form. Text = “Borders”; my. Form. Border. Style = Form. Border. Style. Fixed 3 D; Application. Run(my. Form); } }

Cобытие Paint. • Paint информирует программу о том, что вся клиентская область или ее Cобытие Paint. • Paint информирует программу о том, что вся клиентская область или ее часть недействительна (invalid) и требует перерисовки. • Как клиентская область становится недействительной? Когда форма только что создана, вся клиентская область недействительна, так как программа еще ничего в ней не показывала. В программе происходит первое событие Paint, сообщающее о необходимости показать что-нибудь в клиентской области.

 • Когда вы перемещаете окна по экрану, так что они перекрывают друга, • • Когда вы перемещаете окна по экрану, так что они перекрывают друга, • Windows не запоминает вид клиентской области, закрытой другим окном. Потом, когда клиентская область снова открывается, программа должна восстановить ее вид. Поэтому в ней и происходит событие Paint. Когда окно программы после свертывания возвращается в нормальное состояние, в ней также происходит событие Paint.

 • Windows-программа должна быть способна перерисовать свою кпиентскую область в любой момент времени. • Windows-программа должна быть способна перерисовать свою кпиентскую область в любой момент времени. Она должна запоминать всю нужную для этого информацию или иметь возможность быстро обратиться к этой информации. • Может показаться, что структуризация программ для правильной обработки события Paint накладывает слишком жесткие ограничения, но в противном случае работа программы замедлится.

 • На практике при обработке события Paint вам в первую очередь потребуется использовать • На практике при обработке события Paint вам в первую очередь потребуется использовать Paint. Event. Handler — делегат, определенный в пространстве имен System. Windows. Forms одним оператором, который имеет такой вид • public delegate void Paint. Event. Handler(object obj. Sender, Paint. Event. Args pea);

 • Для обработки события Paint, нужно определить в классе статический метод с такими • Для обработки события Paint, нужно определить в классе статический метод с такими же параметрами и таким же типом возвращаемого значения, что и у делегата Paint. Event. Handler-. • static void My. Paint. Handler(object obj. Sender, Paint. Event. Args pea) • { • } • Затем этот обработчик события подключается к событию Paint класса Form посредством специальной синтаксической конструкции: form. Paint += new Paint. Event. Handler(My. Paint. Handler);

 • Paint — это событие, определенное в классе Control и, благодаря наследованию входящее • Paint — это событие, определенное в классе Control и, благодаря наследованию входящее в класс Form. Единственными двумя операторами, применимыми к Paint, являются операторы присваивания += и -=. Оператор += устанавливает обработчик события, подключая метод к событию. • Его синтаксис: object. event += new delegate(method)

 • При отключении метода от события используется такой же синтаксис, но с оператором • При отключении метода от события используется такой же синтаксис, но с оператором -= : • object. event -= new delegate(method) • Однако отключение метода от события требуется редко. Обычно обработчик события устанавливается и никогда не отключается от события.

 • Два параметра обработчика события Paint — объект obj. Sender. и класс Paint. • Два параметра обработчика события Paint — объект obj. Sender. и класс Paint. Event. Args, для которого используется название pea. • Первый параметр содержит ссылку на объект, к которому применяется событие Paint; • В нашем случае это объект form. Данный объект называется отправителем (sender), так как событие исходит от этого объекта,

 • Класс Paint. Event. Args определен в пространстве имен System Windows forms. Он • Класс Paint. Event. Args определен в пространстве имен System Windows forms. Он содержит два свойства, Graphics и Clip. Rectangle, доступные только для чтения. Свойство Graphics содержит экземпляр класса Graphics, определенного в пространстве имен System. Drawing. • Graphics — важнейший класс библиотеки Windows Forms, по важности не уступающий Form. Этот класс служит для рисования графики и вывода текста на форме. • Clip. Rectangle определяет наименьший прямоугольник в координатах клиентской области, в который умещается недействительная зона.

 • В пространстве имен System. Drawing реализована система графического программирования — GDI+. Это • В пространстве имен System. Drawing реализована система графического программирования — GDI+. Это усовершенствованная версия интерфейса GDI (Graphics Device Interface, интерфейс графического устройства) системы Windows. • В подавляющем большинстве программ оператор: • Graphics grfx = pea. Graphics; • Оказывается в первой строке обработчика события Paint.

using System; using System. Drawing; using System. Windows. Forms; class Paint. Event { public using System; using System. Drawing; using System. Windows. Forms; class Paint. Event { public static void Main() { Form form = new Form(); form. Text = "Paint Event"; form. Paint += new Paint. Event. Handler(My. Paint. Handler); Application. Run(form); } static void My. Paint. Handler(object obj. Sender, Paint. Event. Args pea) { Graphics grfx = pea. Graphics; grfx. Clear(Color. Chocolate) ; }}

 • После создания формы в методе Main, метод My. Paint. Handler подключается к • После создания формы в методе Main, метод My. Paint. Handler подключается к событию Paint формы. В обработчике события программа получает в составе класса Paint. Event. Args объект Graphics и вызывает метод Clear этого объекта. Который Закрашивает всю клиентскую область некоторым цветом • void Clear(Color clr) • Параметр метода — объект типа Color.

 • Чтобы получить представление о частоте, с которой программа получает события Paint, попробуйте • Чтобы получить представление о частоте, с которой программа получает события Paint, попробуйте вставить в My. Paint. Handler оператор: • Console. Write. Line("Paint Event");

 • Dсе программы для Windows Forms содержат в начале по меньшей мере три • Dсе программы для Windows Forms содержат в начале по меньшей мере три оператора using. • • using System; using System. Drawing; using System. Windows. Forms; Для программистов на С или C++ естественно думать, что операторы using идентичны операторам #include. • Но это не так! Операторы using существуют только для того, чтобы не требовалось вводить полные имена классов. Все, что в программах на С и C++ обычно делают файлы заголовков (например, объявление типов, функций и классов), здесь обеспечивают DLL, указываемые как ссылки (references), и те же DLL связываются с запускаемой программой для реализации этих классов.

Показ текста • Класс Graphics содержит много методов для рисования графических фигур, например, линий, Показ текста • Класс Graphics содержит много методов для рисования графических фигур, например, линий, кривых, прямоугольников, эллипсов и растровых изображений. • Метод этого класса, показывающий текст в форме, называется Draw. String • Draw. String имеет шесть перегруженных версий, но первые три параметра у них всегда одинаковы. • Самая простая версия Draw. String определяется так:

 • void Draw. String(string str, Font font, Brush brush, float x, float y); • void Draw. String(string str, Font font, Brush brush, float x, float y); • Можно предположить, что параметрами Draw. String являются строка, которую требуется показать, и координаты места, в котором она появится. • Предположить, что к параметрам метода относятся также шрифт, используемый для показа текста, и нечто, называемое Brush (служит для указания цвета текста), вы вряд ли могли, но все же это так.

 • Наличие этих двух параметров является составной частью того, что имеется в виду, • Наличие этих двух параметров является составной частью того, что имеется в виду, когда говорят о GDI+ как о графической системе программирования без информации о состоянии (stateless). Все, что нужно системе для показа различных графических фигур, содержится прямо в вызовах методов. • Обратной стороной такого подхода является то, что вызов Draw. String содержит слишком много информации. Вы можете поймать себя на том, что сокращаете второй и третий параметры до одной буквы или ищете другие пути, чтобы сделать вызов метода короче.

 • Первый параметр Draw. String — текстовая строка, которую требуется отобразить, например: • • Первый параметр Draw. String — текстовая строка, которую требуется отобразить, например: • grfx. Draw. String("Hello, world!", . . . ); • Второй параметр Draw. String — шрифт, используемый для рисования текста. Это объект типа Font. Класс Font определен в пространстве имен System. Drawing. Достаточно сказать, что для программ Windows Forms доступно большое количество шрифтов, размеры которых можно масштабировать. • Пока мы используем шрифт по умолчанию.

 • При установке обработчика события Paint для формы объект, для которого выполняется событие, • При установке обработчика события Paint для формы объект, для которого выполняется событие, получают приведением типа первого параметра к типу этого объекта: • Form form = (Form)obj. Sender; • Это приведение типа работает, так как obj. Sender действительно является объектом типа Form. Если obj. Sender не объект типа Form (или класс, унаследованный от Form), этот оператор сгенерировал бы исключение. Так что в обработчике события вы можете обращаться к шрифту по умолчанию, используя form font. Вызов Draw. String будет выглядеть примерно так: • grfx, Draw. String(stroka, form. Font, . . . );

 • Если Draw. String вызывается несколько раз, можно сначала определить объект типа Font • Если Draw. String вызывается несколько раз, можно сначала определить объект типа Font и присвоить ему шрифт по умолчанию: • Font font = form. Font; • В этом операторе слово «font» используется многократно! • Первое ство Font — это класс, определенный в пространстве имен System. Drawing; • font строчными буквами — объект этого класса. • Последний Font — это свойство класса Form. Вызов Draw. String принимает вид: • grfx. Draw. String(str, font, . . . );

 • Третий параметр Draw. String указывает цвет символов шрифта. Хотя параметр на самом • Третий параметр Draw. String указывает цвет символов шрифта. Хотя параметр на самом деле имеет тип Brush (кисть), а кисть может гораздо больше, чем просто закрашивать поверхность одним цветом. • В кистях могут использоваться градиентная заливка, или шаблоны-орнаменты, или растровые изображения.

 • Проще всего добиться многообразия цветов — использовать класс Brushes. • Заметьте: Brushes • Проще всего добиться многообразия цветов — использовать класс Brushes. • Заметьте: Brushes стоит во множественном числе в отличие от Brush, которое также является именем класса, Класс Brushes содержит 141 статическое неизменямое свойство с такими же именами цветов, что и в классе Color, • Свойства класса Brushes — это объекты типа Brush. Так как эти свойства статические, к ним обращаются по имени класса и имени свойства: • grfx. Draw. String(str, font, Вrushes. Papaya. Whip, . . . );

 • И, наконец, последние два параметра Draw. String указывают горизонтальную (х) и вертикальную • И, наконец, последние два параметра Draw. String указывают горизонтальную (х) и вертикальную (у) координаты точки, где появится левый верхний угол строки текста. • В среде Windows Forms, как и в большинстве графических сред, координатная система по умолчанию имеет начало в левом верхнем углу. • Когда вы рисуете на форме при помощи объекта Graphics, получаемого из класса • Paint. Event. Args, являющегося в свою очередь параметром обработчика события Paint, все координаты отсчитываются от левого верхнего утла клиентской области формы.

 • Единицами измерения являются пикселы. Значения х увеличиваются слева направо. значения у — • Единицами измерения являются пикселы. Значения х увеличиваются слева направо. значения у — сверху вниз, • Повторю: координаты отсчитываются от левого верхнего угла клиентской области. Это область внутри формы, не занятая заголовком, рамкой и меню (если они есть у формы). При использовании объекта Graphics из класса Paint. Event. Args вы не можете рисовать за пределами клиентской области. Значит, можно не беспокоиться, что вы нарисуете что -нибудь не там, где предполагалось, • Координаты точки, передаваемые методу Draw. String, указывают положение левого верхнего угла первого символа строки. • При указании координат (0, 0) строка текста показывается в левом верхнем углу клиентской области.

using System; using System. Drawing; using System, Windows. Forms; class Paint. Hello { public using System; using System. Drawing; using System, Windows. Forms; class Paint. Hello { public static void Main() { Form. form = new Form(); form. Text = "Paint Hello"; form. Back. Color = Color. White; form. Paint += new Paint. Event. Handler (My. Paint. Handler); Application. Run(form); }

static void My. Paint. Handler(object obj. Sender, Paint. Event. Args pea) { Form form static void My. Paint. Handler(object obj. Sender, Paint. Event. Args pea) { Form form = (Form)obj. Sender; Graphics grfx = pea. Graphics; grfx. Draw. String(“Hello world”, form. Font, Brushes. Black, 0, 0); } }

 • Будьте осторожны при написании методовобработчиков события Paint. Эти методы вызываются часто и • Будьте осторожны при написании методовобработчиков события Paint. Эти методы вызываются часто и иногда довольно неожиданно. Лучше всего, если обработчик Paint может перерисовать клиентскую область быстро, без задержек. • Ни в коем случае не помещайте вызов Message. Box. Show() в обработчик события Paint Информационное окно перекроет часть клиентской области, в результате чего снова произойдет событие Paint. И снова, снова. . .

 • Может показаться, что выполнение всей прорисовки в обработчике события Paint накладывает некоторые • Может показаться, что выполнение всей прорисовки в обработчике события Paint накладывает некоторые ограничения. • Поэтому в Windows Forms есть несколько методов, повышающих гибкость рисования. • Во-первых, вы можете получить объект Graphics вне обработчика события Paint, вызвав метод Create. Graphics, имеющийся у класса Control и унаследованный Form. • Во-вторых, можно инициировать событие Paint из других событий, используя метод Invalidate класса Control.