14.02.2017 Views

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

цв<strong>е</strong>ты рисуются при помощи двух циклов foreach. П<strong>е</strong>рвый<br />

добавля<strong>е</strong>т эл<strong>е</strong>м<strong>е</strong>нт PictureBoxes для новых цв<strong>е</strong>тов, а второй<br />

удаля<strong>е</strong>т этот эл<strong>е</strong>м<strong>е</strong>нт для цв<strong>е</strong>тов, которы<strong>е</strong> завяли.<br />

i<br />

p r i v a t e v o i d DrawFlowers() {<br />

f o r e a c h ( F lo w e r f l o w e r i n w o r l d . F l o w e r s )<br />

i f ( ! f l o w e r L o o k u p . C o n t a i n s K e y ( f l o w e r ) ) {<br />

P i c t u r e B o x f l o w e r C o n t r o l = n e w P i c t u r e B o x (<br />

) {<br />

W id t h = 4 5 ,<br />

М<strong>е</strong>тод PrawFlowersQ H e i g h t = 55<br />

зада<strong>е</strong>т полож<strong>е</strong>ни<strong>е</strong><br />

эл<strong>е</strong>м<strong>е</strong>нта PictureBox im a g e = P r o p e r t i e s . R e s o u r c e s . F lo w e r ,<br />

на форм<strong>е</strong> при помощи Сл S iz e M o d e = P i c t u r e B o x S iz e M o d e . S t r e t c h l m a g e<br />

свойства Location объ- L o c a t i o n = f l o w e r . L o c a t i o n<br />

<strong>е</strong>кта Flower.<br />

}; --------------<br />

}<br />

f l o w e r L o o k u p . A d d ( f l o w e r , f l o w e r C o n t r o l )<br />

f i e l d F o r m . C o n t r o l s . A d d ( f l o w e r C o n t r o l ) ;<br />

f o r e a c h ( F lo w e r f l o w e r i n f l o w e r L o o k u p . K e y s )<br />

i f (. ! w o r l d . F l o w e r s . C o n t a i n s ( f l o w e r ) ) {<br />

}<br />

P i c t u r e B o x f l o w e r C o n t r o l T o R e m o v e = f l o w e r L o o k u p [ f l o w e r ] ,■<br />

П<strong>е</strong>рвый цикл foreach<br />

использу<strong>е</strong>т словарь<br />

flowerLookup для про-<br />

— в<strong>е</strong>рки наличия эл<strong>е</strong>м<strong>е</strong>нта<br />

управл<strong>е</strong>ния у выд<strong>е</strong>л<strong>е</strong>нного<br />

1 / цв<strong>е</strong>тка. Н<strong>е</strong> обнаружив<br />

такового, он созда<strong>е</strong>т новый<br />

эл<strong>е</strong>м<strong>е</strong>нт PictureBox<br />

с помощью инициализатора<br />

объ<strong>е</strong>ктов, добавля<strong>е</strong>т<br />

<strong>е</strong>го к форм<strong>е</strong>, а зат<strong>е</strong>м<br />

добавля<strong>е</strong>т <strong>е</strong>го в словарь<br />

flowerLookup.<br />

Второй цикл foreach<br />

ищ<strong>е</strong>т в словар<strong>е</strong><br />

flowerLookup эл<strong>е</strong>м<strong>е</strong>нты<br />

PictureBox. которы<strong>е</strong> уж<strong>е</strong><br />

н<strong>е</strong> принадл<strong>е</strong>жат форм<strong>е</strong>,<br />

и удаля<strong>е</strong>т их.<br />

f i e l d F o r m . C o n t r o l s . R e m o v e ( f l o w e r C o n t r o l T o R e m o v e ) ;<br />

f l o w e r C o n t r o l T o R e m o v e . D i s p o s e ( ) ;<br />

d e a d F lo w e r s .A d d ( f l o w e r ) ;<br />

удалив эл<strong>е</strong>м<strong>е</strong>нт PictureBox, OH<br />

p r i v a t e v o i d DrawBees() {<br />

B e e C o n t r o l b e e C o n t r o l ;<br />

f o r e a c h (B e e b e e i n w o r l d . B e e s ) {<br />

к<br />

вызыва<strong>е</strong>т <strong>е</strong>го м<strong>е</strong>тод DisposeQ<br />

\ — • Посл<strong>е</strong> ч<strong>е</strong>го объ<strong>е</strong>кт Flower добавля<strong>е</strong>тся<br />

в список deadFlowers.<br />

М<strong>е</strong>тод DrawBeesQ т акж<strong>е</strong><br />

использу<strong>е</strong>т два цикла<br />

, roreach. Он по сути д<strong>е</strong>ла<strong>е</strong>т<br />

то ж<strong>е</strong> само<strong>е</strong>, что<br />

b e e C o n t r o l = G e t B e e C o n t r o l ( b e e ) ;<br />

i f ( b e e . I n s i d e H i v e ) {<br />

и м<strong>е</strong>тод DrawFlowersQ. Но<br />

в данном случа<strong>е</strong> функция<br />

i f ( f i e l d F o r m . C o n t r o l s . C o n t a i n s ( b e e C o n t r o l ) )<br />

сложн<strong>е</strong><strong>е</strong>, поэтому мы распр<strong>е</strong>д<strong>е</strong>лили<br />

<strong>е</strong>го функции срункции по no<br />

M o v e B e e F r o m F ie ld T o H iv e ( b e e C o n t r o l ) ;<br />

} e l s e i f ( h i v e F o r m . C o n t r o l s . C o n t a i n s ( b e e C o n t r o l ) Л 1<strong>е</strong> то5 дл 1^ 0^ -<br />

M o v e B e e F r o m H i v e T o F i e ld ( b e e C o n t r o l) ;<br />

л<strong>е</strong>гчив понимани<strong>е</strong> кода.<br />

b e e C o n t r o l . L o c a t i o n = b e e . L o c a t i o n ; kj t ^ /n д<br />

М<strong>е</strong>тод DrawBeesQ пров<strong>е</strong>ря-<br />

’ em. н<strong>е</strong> возникла ли ситуация.<br />

когда пч<strong>е</strong>ла находится в уль<strong>е</strong>.<br />

f o r e a c h (В <strong>е</strong> <strong>е</strong> Ь <strong>е</strong> <strong>е</strong> i n b e e L o o k u p .K e y s ) { а <strong>е</strong><strong>е</strong> эл<strong>е</strong>м<strong>е</strong>нт управл<strong>е</strong>ния —<br />

Посл<strong>е</strong> удал<strong>е</strong>ния эл<strong>е</strong>-^^ *: ' w o r l d . B e e s . C o n t a i n s ( b e e ) ) { форм<strong>е</strong> FieldForm или<br />

b e e C o n t r o l = b e e L o o k u p [ b e e ] ;<br />

наоборот. Д ля п<strong>е</strong>р<strong>е</strong>м<strong>е</strong>щ<strong>е</strong>ния<br />

^ \ эл<strong>е</strong>м<strong>е</strong>нта BeeControls м<strong>е</strong>жду<br />

i f ( f i e l d F o r m . C o n t r o l s . C o n t a i n s ( b e e C o n t r o l ) ) формами используются два<br />

f i e l d F o r m . C o n t r o l s . R e m o v e ( b e e C o n t r o l ) ; дополнит<strong>е</strong>льных м<strong>е</strong>тода.<br />

м<strong>е</strong>нта BeeControl<br />

нужно вызвать <strong>е</strong>го<br />

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

при этом буд<strong>е</strong>т<br />

удал<strong>е</strong>н и связанный<br />

с ним тайм<strong>е</strong>р<br />

i f ( h i v e F o r m . C o n t r o l s . C o n t a i n s ( b e e C o n t r o l ) ) Второй цикл foreach pah<br />

i v e F o r m . C o n t r o ls . R e m o v e ( b e e C o n t r o l ) ; бота<strong>е</strong>т в основном как в<br />

b e e C o n t r o l . D i s p o s e О ; К ;; м<strong>е</strong>тод<strong>е</strong> DrawFlowersQ. но<br />

, r e t i r e d B e e s .A d d ( Ь <strong>е</strong> <strong>е</strong> ) ; приходится уда-<br />

} 1 лять эл<strong>е</strong>м<strong>е</strong>нты BeeControl<br />

} из правой формы.<br />

594 глава 13

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

Saved successfully!

Ooh no, something went wrong!