У меня есть 2 обработчика, использующих ту же форму. Как удалить обработчики перед добавлением нового (C#)?Как отменить регистрацию всех обработчиков для события формы?
ответ
Если вы работаете в самой форме, вы должны быть в состоянии сделать что-то вроде:
псевдокод:
Delegate[] events = Form1.SomeEvent.GetInvokationList();
foreach (Delegate d in events)
{
Form1.SomeEvent -= d;
}
От внешней формы, ваш SOL.
Если вы знаете, что эти обработчики, просто удалите их так же, как вы подписались на них, кроме как - = вместо + =.
Если вы не знаете, что такое обработчики, вы не можете удалить их - идея состоит в том, что инкапсуляция события не позволяет одной заинтересованной стороне заслонять интересы другого класса при наблюдении за событием.
EDIT: Я предполагаю, что вы говорите о событии, реализованном другим классом, например. контроль. Если ваш класс «владеет» событием, то просто установите для соответствующей переменной значение null.
Я понимаю, что этот вопрос довольно старый, но, надеюсь, он поможет кому-то. Вы можете отменить регистрацию всех обработчиков событий для любого класса с небольшим отражением.
public static void UnregisterAllEvents(object objectWithEvents)
{
Type theType = objectWithEvents.GetType();
//Even though the events are public, the FieldInfo associated with them is private
foreach (System.Reflection.FieldInfo field in theType.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance))
{
//eventInfo will be null if this is a normal field and not an event.
System.Reflection.EventInfo eventInfo = theType.GetEvent(field.Name);
if (eventInfo != null)
{
MulticastDelegate multicastDelegate = field.GetValue(objectWithEvents) as MulticastDelegate;
if (multicastDelegate != null)
{
foreach (Delegate _delegate in multicastDelegate.GetInvocationList())
{
eventInfo.RemoveEventHandler(objectWithEvents, _delegate);
}
}
}
}
}
- 1. Как отменить регистрацию обработчиков событий GWT в Popup/DialogBox?
- 2. Как регистрировать/отменить регистрацию обработчиков в событии, используемом в Observable.FromEventPattern?
- 3. Отменить регистрацию события, используя объявление WithEvents
- 4. Android EventBus - Отменить регистрацию из определенного события
- 5. Отменить регистрацию зарегистрированного события filewatcher не работает
- 6. Как отменить регистрацию c2dm?
- 7. Как отменить регистрацию датчика?
- 8. Как правильно отменить регистрацию обработчика событий
- 9. Отменить регистрацию для одиночной отправки?
- 10. Как отменить регистрацию Push Notification?
- 11. Как мне отменить регистрацию для KVO?
- 12. Как отменить регистрацию выбранный javascript
- 13. Отменить регистрацию изменений оракула
- 14. Как отменить регистрацию MediaButtonReceiver onDestroy?
- 15. Eventbus - как отменить регистрацию POJO?
- 16. Как отменить регистрацию конкретных onareatouch
- 17. , как отменить регистрацию пользователя программного
- 18. Как отменить регистрацию событий в атомной оболочке?
- 19. Как отменить захват обработчиков событий в C#
- 20. Как отменить регистрацию gcm в расширении chrome
- 21. Как отменить регистрацию COM-сервера Python
- 22. Как отменить регистрацию TdxPNGImage как обработчика свойств?
- 23. Как узнать, сколько обработчиков событий для события?
- 24. Отменить регистрацию PhoneStateListener из BroadcastReceiver
- 25. Отменить регистрацию всех широковещательных приемников, зарегистрированных в действии
- 26. Отменить регистрацию BroadcastReceiver на Android
- 27. Должен ли я отменить регистрацию на событие закрытия формы?
- 28. Как отменить регистрацию каталога как Git root?
- 29. Expose всех обработчиков событий UserControl
- 30. Отменить регистрацию плагина в Chart.js
Я у вас есть доступ к переменной, просто установите его в нуль - не нужно, чтобы пройти через список вызовов ... – 2008-11-13 17:58:01