Чтобы создать новый обработчик событий в элементе управления, вы можете сделать это
c.Click += new EventHandler(mainFormButton_Click);
или это
c.Click += mainFormButton_Click;
и удалить обработчик события, вы можете сделать это
c.Click -= mainFormButton_Click;
Но как удалить все обработчики событий из события?
c.Click = null
?Clear
метод был слишком много усилий, по-видимомуОтветы:
Я нашел решение на форумах MSDN . Пример кода ниже удалит все
Click
события изbutton1
.источник
RemoveClickEvent
старта с:FieldInfo f1 = typeof(Button)
? Я получаю ноль,GetField
если я используюControl
.ObservableCollection.CollectionChanged += null;
Вы, ребята, делаете этот путь слишком тяжелым для себя. Это так просто:
источник
FindClicked = null;
что проще.kinect.ColorFrameReady -= MyEventHander
работает, но вGetInvocationList()
экземплярах kinect нет метода для перебора их делегатов.GetInvocationList
не найдено.От удаления всех обработчиков событий :
источник
Принятый ответ не полный. Это не работает для событий, объявленных как {add; Удалить;}
Вот рабочий код:
источник
BindingFlags.Public
первыйGetField
вызов.Это не вредит удалению несуществующего обработчика событий. Так что, если вы знаете, какие там могут быть обработчики, вы можете просто удалить их все. У меня просто был похожий случай. Это может помочь в некоторых случаях.
Подобно:
источник
Я на самом деле использую этот метод, и он работает отлично. Я был «вдохновлен» кодом, написанным здесь Aeonhack .
Поле MyEventEvent скрыто, но оно существует.
Отладка, вы можете увидеть, как
d.target
объект на самом деле обрабатывает событие, иd.method
его метод. Вы только должны удалить это.Это прекрасно работает. Больше нет объектов, не являющихся GC'ами из-за обработчиков событий.
источник
Я ненавидел все полные решения, показанные здесь, я сделал смесь и протестировал сейчас, работал для любого обработчика событий:
Легко! Спасибо за Стивена Пунака.
Я использовал его, потому что я использую общий локальный метод для удаления делегатов, а локальный метод вызывался после разных случаев, когда установлены разные делегаты.
источник
Если вам действительно придется сделать это ... это займет отражение и достаточно времени, чтобы сделать это. Обработчики событий управляются в карте события для делегирования внутри элемента управления. Вам нужно будет
Короче, много работы. Это возможно в теории ... Я никогда не пробовал что-то подобное.
Посмотрите, сможете ли вы улучшить контроль / дисциплину на этапе подписки-отписки для контроля.
источник
Стивен имеет право. Это очень просто:
источник
foreach (EventHandler<MyCompletedArgs> handler in CompletionCompleted.GetInvocationList())
{
CompletionCompleted -= handler;
}
Я только что нашел, как приостановить события при установке свойства элемента управления WinForms . Это удалит все события из элемента управления:
источник
Ух ты. Я нашел это решение, но ничего не получилось, как я хотел. Но это так хорошо
источник
Эта страница мне очень помогла. Код, который я получил отсюда, предназначался для удаления события нажатия кнопки. Мне нужно удалить события двойного щелчка с некоторых панелей и события щелчка с некоторых кнопок. Поэтому я сделал расширение элемента управления, которое удалит все обработчики событий для определенного события.
Теперь, использование этого расширения. Если вам нужно удалить события нажатия кнопки,
Если вам нужно удалить события двойного клика с панели,
Я не эксперт в C #, поэтому, если есть какие-либо ошибки, пожалуйста, простите меня и сообщите мне об этом.
источник
Иногда нам приходится работать с элементами управления ThirdParty, и нам нужно создавать эти неудобные решения. Основываясь на ответе @Anoop Muraleedharan, я создал это решение с типом логического вывода и поддержкой ToolStripItem.
И вы можете использовать это так
источник
Я нашел другое рабочее решение Дугласа .
Этот метод удаляет все обработчики событий, которые установлены для конкретного события routet в элементе.
Используйте это как
Полный код:
источник
удаляет все обработчики для кнопки: save.RemoveEvents ();
источник
Что ж, здесь есть другое решение для удаления связанного события (если у вас уже есть метод для обработки событий для элемента управления):
источник
Это не ответ на ФП, но я решил опубликовать это здесь на случай, если это поможет другим.
источник
Я нашел этот ответ, и он почти соответствует моим потребностям. Спасибо SwDevMan81 за класс. Я изменил его, чтобы разрешить подавление и возобновление отдельных методов, и я решил опубликовать его здесь.
источник