Где отменить подписку на события в WinForms UserControl
где бы вы отписались от событий в UserControl
? Я подписываюсь на него в Load
событие, как я сделал в формах. И в формах, которые я обычно отписываюсь в Closing
событие, но я не могу найти ничего подобного в UserControl
...
3 ответов
надо отказаться вообще? Ссылка на пользовательский элемент управления выполняется после его выгрузки? Если нет, вам не нужно беспокоиться о обработчиках событий, потому что как только пользовательский элемент управления удаляется из памяти, так и обработчики событий. Нельзя так давать ссылки.
здесь are раз, когда вы хотите сделать это (например, при использовании такси).
Для полноты ответа на ваш вопрос:
protected override void OnCreateControl()
{
base.OnCreateControl();
if(!DesignMode) //only time this.ParentForm should be null
this.ParentForm.FormClosing += ParentForm_FormClosing;
}
private void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
{
//Unregister events here
}
вы также можете переопределить Dispose()
Как говорили другие, действительно ли нужно отказаться от подписки в вашем сценарии?
Если вам действительно нужно отказаться от подписки, однако вы делаете это точно наоборот подписки:
UserControl1.Click -= new EventHandler(UserControl1_Click);