Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как снять обработчик с события


Автор: albert21 20.4.2006, 21:18
Подскажите пожалуйста как можно снять обработчик с события

Код

this.dataGridParent.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);


не просто this.dataGridParent.CellMouseDown -= new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);

а чтобы что-то вроде null было 

Автор: ivashkanet 21.4.2006, 09:17
Цитата(albert21 @  20.4.2006,  21:18 Найти цитируемый пост)
не просто this.dataGridParent.CellMouseDown -= new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);

а чтобы что-то вроде null было 

Не знаю что ты этим имел в веду, но можно снять обработчик в дизайнере:
Открываешь пропетесы грида, находишь свое событие, правая кнопка, ресет. Все.

Есть еще вариант: 
Открываешь FormX.Disigner.cs, там находишь то место в котором обработчик ставится и удаляешь эту строчку.
 smile  

Автор: VisualProgrammerNET 21.4.2006, 14:46
А зачем именно null?  

Автор: ivashkanet 21.4.2006, 15:42
Цитата(VisualProgrammerNET @  21.4.2006,  14:46 Найти цитируемый пост)
А зачем именно null?  


2 VisualProgrammerNET, а ты понял о чем albert21 говорит??? 

Автор: albert21 22.4.2006, 17:48
Вы правы, проблема специфическая, я её обошёл! Я в программе в зависимости от условий вручную, а не с помощью дизайнера вешал различные обработчики и обнаружил, на мой взгляд странную вещь! Если в проге насколько раз повторить такую строку:
Код

this.dataGridParent.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);
this.dataGridParent.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);
this.dataGridParent.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);


А в обработчике dataGridReader_CellMouseDown показывать какую-нибудь форму, то при наступлении события dataGridParent.CellMouseDown эта форма отобразится три раза (количество повторений строки см выше исходный код)

Вроде правильно написал smile
Вообщем проблема уже не интересует 

Автор: Дрон 22.4.2006, 19:08
albert21, 
Цитата(albert21 @  22.4.2006,  18:48 Найти цитируемый пост)
А в обработчике dataGridReader_CellMouseDown показывать какую-нибудь форму, то при наступлении события dataGridParent.CellMouseDown эта форма отобразится три раза

Правильно.

При этом гораздо более любопытен тот факт, что если ты попробуешь отписаться:
Код

this.dataGridParent.CellMouseDown -= new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridReader_CellMouseDown);

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

Автор: ivashkanet 22.4.2006, 22:15
Цитата(albert21 @  22.4.2006,  17:48 Найти цитируемый пост)
Вы правы, проблема специфическая, я её обошёл!

Так и не понял в чем была проблема  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)