Где отменить подписку на события в 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);