netlib.narod.ru | < Назад | Оглавление | Далее > |
Будьте осторожны при написании методов-обработчиков события Paint. Эти методы вызываются часто и иногда довольно неожиданно. Лучше всего, если обработчик Paint может перерисовать клиентскую область быстро, без задержек.
Ранее в этой главе я предлагал использовать для простой отладки окна сообщений. Но ни в коем случае не помещайте вызов MessageBox.Show в обработчик события Paint! Информационное окно перекроет часть клиентской области, в результате чего снова произойдет событие Paint. И снова, снова... По этой же причине никогда не помещайте вызовы Console.Read или Console.ReadLine в любые обработчики событий. Однако вызовы Console.Write или Console.WriteLine вполне безопасны.
Кроме того, не делайте ничего, что может накапливаться. В одной из своих первых программ для Windows Forms я написал обработчик Paint, который обращался к свойству Font, создавал новый шрифт вдвое большего размера и присваивал свойству Font этот новый шрифт. Каждый раз при возникновении события Paint шрифт становился вдвое больше, чем раньше. («Дорогая, я увеличил шрифт!», последняя серия.)
Может показаться, что выполнение всей прорисовки в обработчике события Paint накладывает некоторые ограничения. Бывает. Поэтому в Windows Forms есть несколько методов, повышающих гибкость рисования.
Во-первых, вы можете получить объект Graphics вне обработчика события Paint, вызвав метод CreateGraphics, имеющийся у класса Control и унаследованный Form. Во-вторых, можно инициировать событие Paint из других событий, используя метод Invalidate класса Control. Я покажу, как это делается, когда буду рассматривать события клавиатуры, мыши и таймера в главах 6, 8 и 10.
netlib.narod.ru | < Назад | Оглавление | Далее > |