2009-03-26 5 views
1

У меня есть форма Windows в .NET, которая будет служить мастером для достижения чего-то. Это содержит 3 шага: Step1, Step2, Step3.

Каждый шаг снова является пользовательским элементом управления. Основная форма содержит панель, отображающую текущий Шаг. Когда я переключаюсь между шагами, то:

1) Утилизируйте текущий пользовательский элемент управления, вызвав его метод Dispose().
2) Очистка основной вид панели
3) Инициализировать пользовательский элемент управления следующего шага и добавить его в основной панели

Теперь, вопрос, управление пользователя на этапе одного содержит еще один пользовательский элемент управления. Когда я изменяю еще один шаг и вернуться к шагу 1, я получаю следующее сообщение об ошибке:Не удается получить доступ к удаленному объекту .NET

"Cannot access disposed object." 

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

ответ

1

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

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

+0

Когда я попытался подойти к тому, чтобы не утилизировать элемент управления, я столкнулся с новой проблемой. Событие, в котором я вызываю пользовательский элемент управления, размещенный на шаге 1 для отображения, вызывается два раза. Не могли бы вы рассказать мне причину этого? –

+0

Я только что понял, что не совсем два раза. Он называется так много раз, что я swtich на другой шаг и возвращаюсь к шагу 1. –

1

Зачем вам нужно распоряжаться пользовательским контролем? Как правило, когда форма закрывается, она будет распоряжаться всеми своими дочерними элементами управления для вас.

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

Как правило, вы не вызываете dispose на объект напрямую; вы должны использовать шаблон «using», чтобы избежать удаления объекта до его повторного использования и обеспечения того, чтобы объект был удален, как только вы закончите с ним.

Смежные вопросы