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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределить обработчик в потомке 
V
    Опции темы
Qwe2
Дата 29.10.2013, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

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



Есть класс, который создает форму с ListView. Для двойного клика ListView есть обработчик события:
Код

class MyClass: Form
{
        ListView listViewSMD;

        void InitializeComponent()
        {
                <...>
                listViewSMD = new ListView();
                listViewSMD.DoubleClick += (s, e) =>
                {
                                <...>
                                this.Close();
                };
        }
}

Создал класс-наследник от MyClass, хочу, чтобы для ListView был свой обработчик события. Как переопределить обработчик в классе-наследнике? Обязательно менять в базовом классе делегата на виртуальный метод или можно обойтись без модификаций в базовом классе?

PM MAIL   Вверх
jonie
Дата 29.10.2013, 10:46 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата(Qwe2 @  29.10.2013,  09:31 Найти цитируемый пост)
Обязательно менять в базовом классе делегата на виртуальный метод или можно обойтись без модификаций в базовом классе?

используйте не анонимные лямбды, а обычный метод, передав при подписке делегат на него. Этот метод сделайте виртуальным. И в наследнике перегружайте.
Например:
Код

...
listViewSMD.DoubleClick += OnDoubleClick;
...

protected virtual void OnDoubleClick(object s, EventArgs e) {
....
}





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Qwe2
Дата 29.10.2013, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

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



А как переопределить? Надо listViewSMD (в базовом классе) сделать protected?
PM MAIL   Вверх
jonie
Дата 29.10.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата(Qwe2 @  29.10.2013,  12:35 Найти цитируемый пост)
А как переопределить? Надо listViewSMD (в базовом классе) сделать protected? 

как обычно override-нуть метод. Давайте вы что-то прочитайте про virtual слово в C#, прежде чем задавать подобные вопросы.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Qwe2
Дата 29.10.2013, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

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



Да это понятно, что override, но у меня вызываются оба обработчика...
PM MAIL   Вверх
dzaraev
Дата 30.10.2013, 07:20 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

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



Цитата(Qwe2 @  29.10.2013,  22:22 Найти цитируемый пост)
 но у меня вызываются оба обработчика

Если вы имеете в виду, что вам нужно вызвать оба обработчика, то просто добавьте в перегруженный метод base.OnDoubleClick(s, e) в любом месте, в зависимости от сценария обработки (обычно в начале или в конце).
Например так:
базовый класс
Код

...
listViewSMD.DoubleClick += OnDoubleClick;
...
protected virtual void OnDoubleClick(object s, EventArgs e) {
//TODO базовая обработка
}

наследник
Код

protected override void OnDoubleClick(object s, EventArgs e) {
base.OnDoubleClick(s, e)
//TODO обработка наследника
}


Это сообщение отредактировал(а) dzaraev - 30.10.2013, 07:20
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
Qwe2
Дата 30.10.2013, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 23.3.2008

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



Спасибо, все получилось!
PM MAIL   Вверх
dzaraev
Дата 30.10.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

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



Если вопрос решён - помечайте тему пожалуйста. 
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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