Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение OnPaint 
:(
    Опции темы
yngwie19
Дата 5.8.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравствуйте. У меня вот какой вопрос. В книге Петцольда рассказывается про создание обработчика для события Paint, и говорится что можно его создать как статический метод класса или переопределить виртуальный метод OnPaint. С первым все понятно, но по второму есть пара вопросов:
1) В каких случаях нужно использовать второй способ и вообще какой применяют чаще?
2) Также говорится что из переопределенного метода OnPaint нужно вызывать его для базового класса (base.OnPaint(...)), поясните зачем?

PM MAIL   Вверх
diadiavova
Дата 5.8.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(yngwie19 @  5.8.2009,  23:04 Найти цитируемый пост)
что можно его создать как статический метод класса

Почему статический? smile 
Цитата(yngwie19 @  5.8.2009,  23:04 Найти цитируемый пост)
В каких случаях нужно использовать второй способ и вообще какой применяют чаще?

Если создаёшь собственный контрол на базе существующего - переопределяй, а если просто используешь существующий контрол, в котором надо что-то рисовать - то ничего переопределить в нём ты просто не сможешь, там обработка события - единственный доступный способ устойчивой прорисовки.
Цитата(yngwie19 @  5.8.2009,  23:04 Найти цитируемый пост)
Также говорится что из переопределенного метода OnPaint нужно вызывать его для базового класса (base.OnPaint(...)), поясните зачем?

Затем, что в этом методе базового класса тоже выполняются какие-то действия и если ты переопределяешь метод, то во всех случаях, когда в базовом классе вызывался этот метод, вместо него будет вызываться твой и логика базового класса может оказаться нарушенной. Чтобы этого не произошло и действия предусмотренные данным методом базового класса всё-таки выполнялись надо его вызвать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
yngwie19
Дата 6.8.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(diadiavova @  5.8.2009,  23:39 Найти цитируемый пост)
Почему статический?

имею в виду обработчик., который на основе делегата. Он ведь должен быть объявлен как static?

Цитата(diadiavova @  5.8.2009,  23:39 Найти цитируемый пост)
Если создаёшь собственный контрол на базе существующего - переопределяй


в Петцольде написано, что метод OnPaint класса Control отвечает за вызов всех установленных обработчиков события Paint. Значит чтобы они вызывались надо сделать так чтобы был вызов OnPaint из класса Control так? а это можно сделать только через base.OnPaint?
PM MAIL   Вверх
diadiavova
Дата 6.8.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(yngwie19 @  6.8.2009,  01:20 Найти цитируемый пост)
Он ведь должен быть объявлен как static?

Зачем?

Цитата(yngwie19 @  6.8.2009,  01:20 Найти цитируемый пост)
а это можно сделать только через base.OnPaint? 

Да, и не только. В базовых классах может выполняться какая-то другая прорисовка, да и вообще мало личто там ещё делается, об этом обычно ничего не известно, а вот чтобы не нарушать работу базовых классах в переопределяемых методах вызываются их переопределённые версии.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
yngwie19
Дата 6.8.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



diadiavova, Спасибо, да кстати. тот же Петцольд пишет, что в классе Form нет реализации метода OnPaint и поэтому сделав:
Код

class MyConrol : Form
{
       protected override void OnPaint(...)
       {
              base.OnPaint(...)
       }
}

Мы по сути через иерархию классов вызываем его в Control, который уже отвечает за вызов всех установленных обработчиков события Paint? главное до него добраться?

P.S: 
Цитата(yngwie19 @  6.8.2009,  00:20 Найти цитируемый пост)
метод OnPaint класса Control отвечает за вызов всех установленных обработчиков события Paint

которые унаследованные от Control или Form и т.д, или все которые есть в других классах не производных Form или Control?

Это сообщение отредактировал(а) yngwie19 - 6.8.2009, 00:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.