Динамически загружаемый пользовательский элемент управления с событием Обработчики - отменить регистрацию

У меня есть форма с панелью, на которой я динамически загружаю несколько пользовательских элементов управления. Я обрабатываю события для каждого из этих элементов управления.

UserControl userControl1 = LoadControl("control.ascx") as UserControl;
userControl1.Event += new ControlEventHandler(userControl_Event);
this.Panel.Controls.Add(userControl1);

UserControl userControl2 = LoadControl("control.ascx") as UserControl;
userControl2.Event += new ControlEventHandler(userControl_Event);
this.Panel.Controls.Add(userControl2);

...

Теперь, когда я избавляюсь от элементов управления на панели, я просто делаю

this.Panel.Controls.Clear();

. Функция Clear () заботится о том, чтобы избавиться от событий, или я должен это делать?

foreach(Control control in this.Panel.Controls)
{
    UserControl userControl = control as UserControl;
    if(userControl != null)
    {
        userControl -= userControl_Event;
    }
}

до того, как я очистил () содержимое Panel?

По сути, я ищу способ динамически загружать пользовательские элементы управления и обрабатывать их события, не создавая утечки, когда я от них избавляюсь.

Спасибо !

EDIT: Поскольку мои элементы управления создаются в событии Page_Init страницы (каждый раз, когда они загружаются динамически), правильно ли говорить, что срок их службы не может превышать срок жизни страницы? Из того, что я понимаю, контроль не существует после поста назад. Новый создается каждый раз. Поэтому мне не нужно отменять регистрацию события, потому что объект, которого он даже не существует, загружается на следующей странице. Это правильно?

5
задан Hugo Migneron 27 August 2010 в 15:06
поделиться