Как сделать событие пустым снова? - PullRequest
2 голосов
/ 29 ноября 2011

Если у вас есть событие Winform MouseDown, установленное для метода, как вы очищаете или сбрасываете событие.так что у него нет методов для вызова при его запуске.

Возьмем, к примеру:

MouseDown += new System.Windows.Forms.MouseEventHandler(@SelectMouseDown);

И вы хотите сбросить событие MouseDown в ноль, ноль или ноль.

Я думаю, что я был не в состоянии сделать следующее из-за другого вопроса StackOverflow.

MouseDown -= System.Windows.Forms.MouseEventHandler(@SelectMouseDown);

Это не работает.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Не делал никаких тестов, но это должно делать работу. Добавьте «новый» в начало строки

MouseDown -= new System.Windows.Forms.MouseEventHandler(@SelectMouseDown);
2 голосов
/ 29 ноября 2011

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

Код, который вы показали, удалит обработчик на MouseDown для SelectMouseDown. Но это не очистит других.

Если вы являетесь владельцем события, тогда удаление всех обработчиков так же просто, как установка события в null.

private event EventHandler _mouseDownEvent;
public event EventHandler MouseDown {
  add { _mouseDownEvent += value; }
  remove { _mouseDownEvent -= value; }
}

void ClearMouseDown() {
  _mouseDownEvent = null;
}
...