![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Здравствуйте. У меня вот какой вопрос. В книге Петцольда рассказывается про создание обработчика для события Paint, и говорится что можно его создать как статический метод класса или переопределить виртуальный метод OnPaint. С первым все понятно, но по второму есть пара вопросов:
1) В каких случаях нужно использовать второй способ и вообще какой применяют чаще? 2) Также говорится что из переопределенного метода OnPaint нужно вызывать его для базового класса (base.OnPaint(...)), поясните зачем? |
|||
|
||||
| diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Почему статический?
Если создаёшь собственный контрол на базе существующего - переопределяй, а если просто используешь существующий контрол, в котором надо что-то рисовать - то ничего переопределить в нём ты просто не сможешь, там обработка события - единственный доступный способ устойчивой прорисовки.
Затем, что в этом методе базового класса тоже выполняются какие-то действия и если ты переопределяешь метод, то во всех случаях, когда в базовом классе вызывался этот метод, вместо него будет вызываться твой и логика базового класса может оказаться нарушенной. Чтобы этого не произошло и действия предусмотренные данным методом базового класса всё-таки выполнялись надо его вызвать. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
имею в виду обработчик., который на основе делегата. Он ведь должен быть объявлен как static?
в Петцольде написано, что метод OnPaint класса Control отвечает за вызов всех установленных обработчиков события Paint. Значит чтобы они вызывались надо сделать так чтобы был вызов OnPaint из класса Control так? а это можно сделать только через base.OnPaint? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Зачем? Да, и не только. В базовых классах может выполняться какая-то другая прорисовка, да и вообще мало личто там ещё делается, об этом обычно ничего не известно, а вот чтобы не нарушать работу базовых классах в переопределяемых методах вызываются их переопределённые версии. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
diadiavova, Спасибо, да кстати. тот же Петцольд пишет, что в классе Form нет реализации метода OnPaint и поэтому сделав:
Мы по сути через иерархию классов вызываем его в Control, который уже отвечает за вызов всех установленных обработчиков события Paint? главное до него добраться? P.S:
которые унаследованные от Control или Form и т.д, или все которые есть в других классах не производных Form или Control? Это сообщение отредактировал(а) yngwie19 - 6.8.2009, 00:41 |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |