. Стиллмен, Дж. Грин - Изучаем 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