Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 150

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 144 145 146 147 148 149 < 150 > 151 152 153 154 155 156 .. 320 >> Следующая

private void StyleForcn resizeObject sender. Systan.EwHlArgs e)
(
Invalidated; // 8 пйуль~?ґє форма будет перерисована
}.
Обычно перехват события Resi ге С) производится лишь тогда, когда нам нужно реагировать на изменение размера формы не только ее перерисовкой, но и выполнением каких-либо других действий.
С графической подсистемой .NET и стандартными элементами управления на форме мы познакомимся в ближайших главах. Однако чтобы проиллюстрировать эффект от установки стиля формы, мы рассмотрим очень простой пример. Предположим, что у нас в программе есть код, который обеспечивает вывод пунктирной черной линии вокруг клиентской области на форме. Если форма не будет поддерживать стиля ResizeRedraw, то при изменении размера формы может получиться безобразие (рис. 8.12).
Рис. 8.12. Форма не поддерживает стиль ResizeRedraw
362 Глава 8 • Окна становятся лучше: введение в Windows.Forms
. * A hull) with дШІ *1
г Gel Form Styles l._ . I J I
Рис. 8.13. Стиль ResizeRedraw нужен почти всегда Код приложения FormStyles можно найти з подкаталоге Chapter 8.
События класса Control
В классе Control определен также набор гебнтий, которые можно логически отнести к двум главным категориям: события мыши и события клавиатуры (табл. 8.7).
Таблица 8.7. Главные события класса Control
Событие_Назначение_
Click, Doubleclick, MouseEnter, Все эти события предназначены для реакции на действия
MouseLeave, MouseDown, MouseUp, пользователя с мышью MouseUp, MouseMove, MouseHover, MouseWheel
Keypress, KeyUp, KeyDown Это — события клавиатуры
Работаем с классом Control
Конечно, в классе Control определено свойств, методов и событий, ко-
торые не были перечислены в предыдущих разделах. Чтобы проиллюстрировать возможности этих членов Control, мы создадим новую форму (она также будет называться Mai nForm), в которой:
• будут заданы конкретные размеры формы;
• будетяерегружек методDispo-.rC):
• будет обеспечена реакция на событияМс-useMove и MouseUp (при помощи двух подходов);
• будет захватываться и обрабатываться . с клавиатуры.
Начнем с создания нового класса С#, производного от Form. Затем мы обновим конструктор этого класса по умолчанию дляустановкиточныхразмеров этой формы при помощи свойств класса Control. Зате vi мы убедимся в том, что размеры действительно установлены, при помощи свойства Bounds и выведем текущие размеры формы в окне сообщения. Свойство Bounds возвращает тип Rectangle, опреде-
Если установить значение true для флага поддержки этого стиля, то все будет в порядке (рис. 8.13).
События класса Control 363
ленный в пространстве имен System.Drawing. Если мы создаем форму вручную, то нам при этом потребуется ссылка на сборку Systern.Drawirig.dll. (при использования шаблона Windows Application эта ссылка будет установлена автоматически). Таким образом, наше приложение будет выглядеть следующим образом:
// Необходимо для использования типа Rectangle using System.Drawing:
public class :
і
public static int Main(string[] args) (
App! icatien Runlnev MainFormO); return 0;
public MainFormO {
Top - 100: Left = 75;
Height = 100: Width = 500;
MessageBox.5how(Bounds.ToStringO. "Current reef):
}
}
При запуске приложения вначале мы увидим окно сообщения (рис. 8.14).
і »Iтri.t rect ІЗ
{Х»75, Ї-3 CC1 Wldtb-SOO.Hdght-100>
Рис. Используем возможное™ свойства Bounds
После его закрытия откроется наша форма, которая будет иметь примерно такой вид, как на рис. 8.15.
Рис. 8.15. Мы установили значения для свойств Top, !.eft. Height и Width
Теперь мы заместим в нашем классе унаследованный метод Component .DisposeO. Какмы уже говорили ранее, в объекте Appl icati on определено событие Appl і cati onExi t. Если мы настроим в нашей форме перехват этого события, мы сможем точно узнать, когда наше приложение завершает свою работу, и сможем выполнить в этот момент нужные нам действия. Однако точно того же эффекта мы сможем достичь, просто прописав нужные нам действия в замещенном методе Di sposeO. Дело в том, что этот
364 Глава 8 • Окна становятся лучше: введение в Windows.Rjrrns
метод автоматически вызывается при закрытии формы. Обратите внимание, что при замещении этого метода очень важно не забыть вызвать D1 spusei) для базового класса (иначе нам придется самим реализовывать мгожеетпо разных операций):
public class Ma-mFori'- : Fora {
// Этот кето»1 л&тсі*зтичесі<и помещается в код проектов Windows Forms public override void DisposeO {
base.DisposeO:
!¦teSSaaeBo/.ShowC'Di^posino this "о-м..."):
1
}
Реагируем на события мыши: часть первая
¦Следующее, что мы должны реализовать в нашей форме, — это реакция на событие MouseUp. В нашем примере мы будем в ответ на это событие отображать координаты указателя мыши - где он находился в тот момент, когда произошло событие. Для организации реакции на событие в приложении Wind ows Forms у нас есть две возможности: использовать делегаты (что нам уже ;шактго) и перезаписать соответствующий метод базового класса. Мы используем оба нпд>одл, начав с обычного применения делегатов. Код обновленной Mai nForm может выглядеть следующим образом:
Предыдущая << 1 .. 144 145 146 147 148 149 < 150 > 151 152 153 154 155 156 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100