2009-03-25 3 views
1

У меня странная ошибка, когда происходит нежелательное событие. Я могу проследить в коде и увидеть, что обработчик событий onRowLeave удаляется с помощью синтаксиса - = then, а затем следующая строка, с которой изменяется DataSource, из-за которой обработчик «OnRowLeave» запускается!удалено событие, но все же стрельба

Так что удаление не работает.

Я могу сказать, что это не добавляется снова так или иначе, потому что у меня есть точка останова во всех местах, где она добавляется + =, и это не ударяет по этим.

Я думаю, что, возможно, это добавляется дважды и удаляется только один раз ... это может вызвать это? Есть ли способ увидеть обработчики в отладчике?

+0

Да, что могло бы вызвать это. Обратите внимание, что OnRowLeave() - это метод, а не событие. –

+0

Так что добавление одного и того же обработчика дважды имеет эффект? – JoelFan

+0

Если да, то как мне этого избежать? Удалить его перед добавлением? – JoelFan

ответ

1

- >> Я думаю, что, может быть, он добавляется дважды и удаляется только один раз ... может это ?

Это правильно.

- >> Есть ли способ увидеть обработчики в отладчике?

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

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

(Возможно, вы хотите отметить (как предложено nobugz), что OnRowLeave является методом DataGridView и не является событием. Этот метод не предоставляется пользователю, но вместо этого отвечает за повышение события RowLeave, которое пользователь не может понять, почему вы используете термин OnRowLeave)

0

Когда у меня были проблемы с обработчиком событий, подобные этому, я обычно предоставляю свои собственные методы добавления/удаления событий и отслеживаю обработчики событий в своем собственный контейнер вместе с другими отладочными данными, если он кажется полезным. Это позволяет проверять коллекцию в отладчике, а дополнительные данные могут быть весьма полезными, если он связывает объект System.Diagnostics.StackTrace для каждого события, которое добавляется таким образом.

Смежные вопросы