Удалить (- =) добавлено событие Form # FormClosed (+ =) в производный класс из экземпляра класса? - PullRequest
1 голос
/ 12 июля 2011

У меня есть «MyForm», который происходит от System.Windows.Form.Form. MyForm обрабатывает событие FormClosed, обработчик которого я установил в конструкторе. Возможно ли для экземпляра объекта MyForm успешно удалить мой обработчик MyClass # FormClosed с помощью - =? Я использую анонимный метод для передачи события FormClosed, если это имеет значение.

// In MyForm Constructor, this ALWAYS gets fired...
FormClosed += (_sender, _args) => { m_mutex.Dispose(); m_mutex = null; };

// In Instantiating Class
MyForm form = new MyForm();
form.FormClosed += (_sender, _args) => {  };

// I have also tried using "delegate(object sender, EventArgs e)" and neither worked.

Ответы [ 2 ]

3 голосов
/ 12 июля 2011

Да, вы можете удалить его, но если вы использовали анонимную функцию, это немного сложнее.

В основном вам либо необходимо прекратить использование анонимной функции (т.е.поместите поведение в метод) или вам понадобится поле для хранения значения делегата:

private EventHandler formClosedHandler;
...

// In constructor
formClosedHandler = (sender, args) => { ... };
FormClosed += formClosedHandler;

// Later...
FormClosed -= formClosedHandler;
formClosedHandler = null;

Лично я предпочел бы перенести логику в методесли это действительно сложно по какой-то причине.

0 голосов
/ 12 июля 2011

Да, вы можете отписаться от любого из событий, даже в методе Disposed().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...