14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

эл<strong>е</strong>м<strong>е</strong>нты управл<strong>е</strong>ни<strong>е</strong> и графич<strong>е</strong>ски<strong>е</strong> фрагм<strong>е</strong>нты<br />

П<strong>е</strong>р<strong>е</strong>рисобка форм и эл<strong>е</strong>м<strong>е</strong>нтов управл<strong>е</strong>ния<br />

Ча сД<strong>е</strong>ной<br />

Как уж<strong>е</strong> было сказано, начав работать с объ<strong>е</strong>ктами G r a p h i c s , вы получили<br />

контроль над графикой. Вы как бы говорит<strong>е</strong> .NET «Эй, я отв<strong>е</strong>чаю за свои д<strong>е</strong>йствия».<br />

А что д<strong>е</strong>лать, <strong>е</strong>сли вы н<strong>е</strong> хотит<strong>е</strong> п<strong>е</strong>р<strong>е</strong>рисовки формы при <strong>е</strong><strong>е</strong> св<strong>е</strong>ртывании и разв<strong>е</strong>ртывании...<br />

или наоборот, хотит<strong>е</strong>, чтобы форма обновлялась чащ<strong>е</strong>? Разобравшись, что происходит при п<strong>е</strong>р<strong>е</strong>рисовк<strong>е</strong>,<br />

вы смож<strong>е</strong>т<strong>е</strong> управлять проц<strong>е</strong>ссом.<br />

^ Каждая цю рма связана с событи<strong>е</strong>м Paint<br />

О ткройт<strong>е</strong> список событий для любой формы, и вы обнаружит<strong>е</strong><br />

в н<strong>е</strong>м событи<strong>е</strong> P a in t . Оно вызыва<strong>е</strong>тся, <strong>е</strong>сли нужно п<strong>е</strong>р<strong>е</strong>рисовать<br />

форму. Но каким образом? П ри помош;и м<strong>е</strong>тода O n P a in t, унасл<strong>е</strong>дованного<br />

от класса Control. (On в начал<strong>е</strong> им<strong>е</strong>ни м<strong>е</strong>тода означа<strong>е</strong>т, что<br />

м<strong>е</strong>тод вызыва<strong>е</strong>т событи<strong>е</strong>.) П<strong>е</strong>р<strong>е</strong>кройт<strong>е</strong> м<strong>е</strong>тод OnPaint:<br />

прод<strong>е</strong>лывали<br />

такую оп<strong>е</strong>рацию для<br />

м<strong>е</strong>тода DisposeQ.<br />

М <strong>е</strong>т о^^‘^'^^ p r o t e c t e d o v e r r i d e v o i d O n P a in t ( P a i n t E v e n t A r g s e ) {<br />

OnPaint для -— — ^Console. WriteLine ("OnPaint {O} {l}", DateTime .Now, e.ClipRectangle) ;<br />

ЛН?(5ой формы b a s e . O n P a in t (e ) ;<br />

и добавьт<strong>е</strong> }<br />

эту строку.<br />

Подвигайт<strong>е</strong> форму за границы экрана, св<strong>е</strong>рнит<strong>е</strong> <strong>е</strong><strong>е</strong>, спрячьт<strong>е</strong> под другим окном и посмотрит<strong>е</strong> на<br />

окно вывода. Вы увидит<strong>е</strong>, что м<strong>е</strong>тод O n P a i n t вызыва<strong>е</strong>т событи<strong>е</strong> P a i n t каждый раз, когда форма<br />

становится н<strong>е</strong>д<strong>е</strong>йствит<strong>е</strong>льной и нужда<strong>е</strong>тся в п<strong>е</strong>р<strong>е</strong>рисовк<strong>е</strong>. Парам<strong>е</strong>тр C l i p R e c t a n g l e - это<br />

прямоугольник, описывающий ставшую н<strong>е</strong>д<strong>е</strong>йствит<strong>е</strong>льной часть формы. Он п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>тся свойству<br />

P a i n t E v e n t A r g s события P a i n t и ув<strong>е</strong>личива<strong>е</strong>т производит<strong>е</strong>льность, так как п<strong>е</strong>р<strong>е</strong>рисовк<strong>е</strong><br />

подв<strong>е</strong>рга<strong>е</strong>тся только та часть формы, которой это д<strong>е</strong>йствит<strong>е</strong>льно нужно.<br />

О Используйт<strong>е</strong> м<strong>е</strong>тод I n v a l i d a t e о<br />

Если скрыть, а потом снова сд<strong>е</strong>лать видимой часть формы, .NET вызыва<strong>е</strong>т<br />

событи<strong>е</strong> Paint, которо<strong>е</strong> вызыва<strong>е</strong>т м<strong>е</strong>тод I n v a l i d a t e (), и М<strong>е</strong>тод InvalidateQ<br />

п<strong>е</strong>р<strong>е</strong>да<strong>е</strong>т <strong>е</strong>му парам<strong>е</strong>тр R e c t a n g l e , указываюш;ий, какая часть фор- по формы<br />

мы должна быть п<strong>е</strong>р<strong>е</strong>рисована. Посл<strong>е</strong> ч<strong>е</strong>го .NET вызыва<strong>е</strong>т м<strong>е</strong>тод ^^д<strong>е</strong>йствит<strong>е</strong>ль-<br />

OnPaint, инициируюш,ий событи<strong>е</strong> P a i n t формы, и н<strong>е</strong>д<strong>е</strong>йствит<strong>е</strong>льпая<br />

область п<strong>е</strong>р<strong>е</strong>рисовыва<strong>е</strong>тся. J V.<br />

© М <strong>е</strong>тод U p d a te ( ) пом <strong>е</strong>щ а<strong>е</strong>т запрос I n v a l i d a t e нав<strong>е</strong>рх<br />

Форма вс<strong>е</strong> вр<strong>е</strong>мя получа<strong>е</strong>т сообщ<strong>е</strong>ния. В сист<strong>е</strong>м<strong>е</strong>, вызывающ<strong>е</strong>й м<strong>е</strong>тод<br />

Вызвав<br />

OnPaint, когда пов<strong>е</strong>рх формы оказыва<strong>е</strong>тся другой объ<strong>е</strong>кт, сущ<strong>е</strong>ствуют<br />

ваша<br />

и други<strong>е</strong> сообщ<strong>е</strong>ния. Нап<strong>е</strong>чатайт<strong>е</strong> o v e r r i d e и посмотрит<strong>е</strong> список м<strong>е</strong>то- ^ли эл<strong>е</strong>м<strong>е</strong>нт<br />

дов, начинающихся с Оп, каждый из них сообща<strong>е</strong>т что-то форм<strong>е</strong>. М<strong>е</strong>тод уу^равл<strong>е</strong>ния н<strong>е</strong>д<strong>е</strong>й -<br />

U p d a t e () пом<strong>е</strong>ща<strong>е</strong>т сообщ<strong>е</strong>ни<strong>е</strong> м<strong>е</strong>тода Invalidate в самый в<strong>е</strong>рх списка, ^твит<strong>е</strong>льны и должны<br />

быть п<strong>е</strong>р<strong>е</strong>рисованы.<br />

_<br />

d М <strong>е</strong>тод R e f r e s h О как сум м а м<strong>е</strong>тодов i n v a l i d a t e () и U p d a te О<br />

М<strong>е</strong>тоЭм можно п<strong>е</strong>р<strong>е</strong>-<br />

прямоугольную<br />

Формы и эл<strong>е</strong>м<strong>е</strong>нты управл<strong>е</strong>ния обладают м<strong>е</strong>тодом R e f r e s h (), который Q^/^acmb — она буд<strong>е</strong>т<br />

сначала вызыва<strong>е</strong>т м<strong>е</strong>тод I n v a l i d a t e (), объявляющий н<strong>е</strong>д<strong>е</strong>йствит<strong>е</strong>ль- п<strong>е</strong>р<strong>е</strong>дана и п ар д м <strong>е</strong>^ру<br />

ной всю занятую графикой область, а зат<strong>е</strong>м U p d a t e ( ), гарантирующий PaintEventArgs со<br />

сообщ<strong>е</strong>нию м<strong>е</strong>тода Invalidate самый высокий приорит<strong>е</strong>т.<br />

'<br />

дальш<strong>е</strong> ► 615

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!