Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ .NET Compact FrameworkΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 103

Автор Иво Π‘Π°Π»ΠΌΡ€Π΅

 System.Drawing.Brush myBrush;

 myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.DarkGreen);


 //Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

 myGfx.FillRectangle(myBrush, 4, 2, 60, 20);

 //-------------------------

 //Π’Π°ΠΆΠ½ΠΎ: Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ очистку!

 //-------------------------

 myBrush.Dispose();

 myGfx.Dispose();

}

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ запросам Paint для Ρ„ΠΎΡ€ΠΌΡ‹ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ участиС Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° пСрСрисовки Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹. Когда ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ содСйствиС Π² восстановлСнии внСшнСго Π²ΠΈΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΎΠ½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΊΠ½Π° ΠΈ элСмСнты управлСния Π±Ρ‹Π»ΠΈ пСрСрисованы. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŽ музСя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осматриваСт ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ искусства, созданноС вашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ экспонатов Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ слоТных случаях, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°ΠΌ ΠΈΡ… ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄, ΠΎΠ½ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ°Ρ‚ΡŒ Ρ…ΡƒΠ΄ΠΎΠΆΠ½ΠΈΠΊΠΎΠ²-спСциалистов. РСшСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ элСмСнты своСго интСрфСйса, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ опСрационная систСма; вмСстС с Ρ‚Π΅ΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π° Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ элСмСнт управлСния Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² пСрСрисовкС, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Invalidate().

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСрисовки Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ нуТдаСтся Π² "Ρ€Π΅Ρ‚ΡƒΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ". Если Ρƒ вас имССтся Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ статичСскоС графичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² этом Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡΡΡŒ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Paint. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ удастся Π»ΠΈ Π²Π°ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ элСмСнт управлСния PictureBox; Π² этом случаС Π²Π°ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ запросами пСрСрисовки.

Π’ листингС 11.8 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСрисовки экрана, которая ΠΏΡ€ΠΈ поступлСнии запроса Π½Π° пСрСрисовку Ρ„ΠΎΡ€ΠΌΡ‹ рисуСт ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста. Π­Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΡ‹. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ экспСримСнта с использованиСм этого ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ функция рисования вызываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой: 

β–  ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, которая выполняСт Π²Ρ‹Π·ΠΎΠ² this.Update(). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ OnPaint. Π’Ρ‹Π·ΠΎΠ² Update() лишь Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ»ΠΈ элСмСнт управлСния ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ, Ссли ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ области, ΡΡ‚Π°Π²ΡˆΠΈΠ΅ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. 

β–  ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π½Π΅ Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, которая выполняСт Π²Ρ‹Π·ΠΎΠ² this.Invalidate(). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этого Π²Ρ‹Π·ΠΎΠ²Π° запросы OnPaint ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ сразу ΠΆΠ΅. ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы появляСтся такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ наступаСт ΠΎΡ‡Π΅Π½ΡŒ быстро. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² this.Invalidate(); this.Update(); ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ пСрСрисовкС Ρ„ΠΎΡ€ΠΌΡ‹. 

β–  ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ, которая ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ элСмСнт управлСния MessageBox. НачнитС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ сообщСний (MessageBox) Π² Ρ€Π°Π·Π½Ρ‹Π΅ мСста Ρ„ΠΎΡ€ΠΌΡ‹, наблюдая Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹ OnPaint(). Π’ Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΈΡ… экспСримСнтов ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ элСмСнта управлСния MessageBox Π½Π°Π΄ Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ OnPaint() (вСроятно, Π² этом случаС опСрационная систСма сама Π·Π°Π±ΠΎΡ‚ΠΈΠ»Π°ΡΡŒ ΠΎ пСрСрисовкС Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡΡΡŒ Π² ΠΏΠΎΠΌΠΎΡ‰ΠΈ со стороны прилоТСния), ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² осущСствлялся, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ сообщСний ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»ΠΎΡΡŒ Π½Π°Π΄ тСкстом. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ опСрационная систСма ΠΈΠ½ΠΎΠ³Π΄Π° способна ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ для вас ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΡƒΡŽ пСрСрисовку экрана, Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡΡΡŒ Π² Π²Ρ‹Π·ΠΎΠ²Π°Ρ… OnPaint().

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ понятным, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ функциям Paint, являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π² состоянии ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, объявив ΠΎΠ±Π»Π°ΡΡ‚ΡŒ экрана Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ возмоТности ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ внСшниС Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы пСрСрисовки экрана. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСрисовки ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС ΠΈ с ΠΌΠ°Π»Ρ‹ΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами. Если пСрСрисовка экрана осущСствляСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Листинг 11.8. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Paint Ρ„ΠΎΡ€ΠΌΡ‹

//ΠšΠΈΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ сСбя

//ΠΎΡ‚ нСобходимости всС врСмя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ

System.Drawing.Brush m_brushBlue;

System.Drawing.Brush m_brushYellow;


//Π Π°Π΄ΠΈ интСрСса подсчитаСм, сколько Ρ€Π°Π· осущСствлялся Π²Ρ‹Π·ΠΎΠ²

int m_paintCount;


//-----------------------------------------------------------------------------

//ΠœΡ‹ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий Paint Π½Π°ΡˆΠΈΡ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚,

//Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠ° вызываСтся для пСрСрисовки самой сСбя, Π±ΡƒΠ΄Π΅Ρ‚

//Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ эта функция.

//-----------------------------------------------------------------------------

protected override void OnPaint(PaintEventArgs e) {

 //Π’ΠΠ–ΠΠž: Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈ Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

 //Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ

 base.OnPaint(e);


 //Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° 1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

 m_paintCount = m_paintCount + 1;


 //------------------------------------------------------------------------

 //Π’Π°ΠΆΠ½ΠΎ:

 //ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Graphics, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° врСмя

 //Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π°

 //ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .Dispose() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - Π½Π΅ наша Π·Π°Π±ΠΎΡ‚Π°

 //------------------------------------------------------------------------

 System.Drawing.Graphics myGfx;

 myGfx = e.Graphics;


 //-------------------------------------------------------------------

 //ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ рисования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ быстро,

 //ΠΊΡΡˆΠΈΡ€ΡƒΠ΅ΠΌ кисти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ сСбя ΠΎΡ‚ нСобходимости ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ

 //ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅

 //-------------------------------------------------------------------

 if (m_brushBlue == null) {

  m_brushBlue = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);

 }

 if (m_brushYellow == null) {

  m_brushYellow = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);

 }

 //-------------------

 //Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ рисованиС

 //-------------------

 myGfx.FillRectangle(m_brushBlue, 2, 2, 100, 100);

 myGfx.DrawString("PaintCount: " + m_paintCount.ToString(), this.Font, mbrushYellow, 3, 3);

 //Π’Ρ‹Ρ…ΠΎΠ΄: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄

 //.Dispose(), ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

}

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ запросам Paint. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для этого использовался ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, основанный Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ наслСдования. Однако ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ событий Paint ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий. Π­Ρ‚ΠΎ выполняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ событий Click; для получСния запросов событий Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Если вмСсто пСрСкрытия ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnPaint() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий, Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

1. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя ΠΈ сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ соотвСтствовали Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ трСбуСтся для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий Paint (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, protected void PaintEventHandler(object sender, PaintEventArgs e) вмСсто protected override void OnPaint(PaintEventArgs e)).

2. Π’Ρ‹Π·ΠΎΠ² base.OnPaint (e) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ осущСствлСниС этого Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² обязанности ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ базовая рСализация base.OnPaint(e) Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ любой зарСгистрированный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий.

3. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ InitializeComponent Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий. НапримСр, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

this.Paint += new System.Windows.Forms.PaintEventHandler(this.PaintEventHandler);

InitializeComponent();

Выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ событий ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ наслСдования, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ собствСнными сообраТСниями. Π§Ρ‚ΠΎ касаСтся мСня, Ρ‚ΠΎ для Ρ‚Π°ΠΊΠΎΠΉ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ запросов пСрСрисовки экрана (Paint), я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, основанный Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ наслСдования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ½Π΅ Π±ΠΎΠ»Π΅Π΅ понятСн. Для высокоуровнСвых событий, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ² (Click), я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ, основанному Π½Π° использовании ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот ΠΊΠΎΠ΄ автоматичСски гСнСрируСтся для мСня послС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΠ° Π½Π° элСмСнтС управлСния Π² ΠΎΠΊΠ½Π΅ конструктора Ρ„ΠΎΡ€ΠΌ.

РСализация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… элСмСнтов управлСния

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ графичСского ΠΊΠΎΠ΄Π° Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… элСмСнтах управлСния являСтся Π½Π΅ΠΏΠ»ΠΎΡ…ΠΈΠΌ способом ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ графичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. РСализация Ρ‚Π°ΠΊΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… элСмСнтов управлСния вСсьма Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Paint Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.