Открыть закрытую форму
-
10-12-2019 - |
Вопрос
Мне интересно, как я могу снова открыть закрытую форму с помощью this.Close().Каждый раз, когда я пытаюсь открыть закрытую форму с помощью Mainmenu.Show(), исключение выдает ошибку «невозможно получить доступ к удаленному объекту».Имя объекта:Главное меню".
Как я могу открыть его снова?
Решение
Когда Close
метод вызывается на Form
ты не можешь позвонить в Show
метод, позволяющий сделать форму видимой, поскольку ресурсы формы уже освобождены, т.е. Disposed
.Чтобы скрыть форму, а затем сделать ее видимой, используйте метод Control.Hide.
Если вы хотите повторно открыть закрытую форму, вам необходимо заново создать ее так же, как вы создавали сначала:
YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();
Другие советы
Я предполагаю, что у вас есть основная форма, которая создает немодальную дочернюю форму.Поскольку эта дочерняя форма может быть закрыта независимо от основной, у вас может быть два сценария:
- Дочерняя форма еще не была создана, или она была закрыта. В данном случае, создайте форму и покажи это.
- Дочерняя форма уже запущена. В этом случае вам нужно только показать его (он может быть свернут, и вы захотите его восстановить).
По сути, ваша основная форма должна отслеживать время жизни дочерней формы, обрабатывая ее FormClosed
событие:
class MainForm : Form
{
private ChildForm _childForm;
private void CreateOrShow()
{
// if the form is not closed, show it
if (_childForm == null)
{
_childForm = new ChildForm();
// attach the handler
_childForm.FormClosed += ChildFormClosed;
}
// show it
_childForm.Show();
}
// when the form closes, detach the handler and clear the field
void ChildFormClosed(object sender, FormClosedEventArgs args)
{
// detach the handler
_childForm.FormClosed -= ChildFormClosed;
// let GC collect it (and this way we can tell if it's closed)
_childForm = null;
}
}
Вы не можете показать замкнутую форму. Вы можете назвать это. HIDE (), чтобы закрыть форму. Позже вы можете позвонить с формой .show ();
Либо так, либо вам нужно создать форму снова и снова.
Небольшое дополнение к интеллектуальному представленному коду выше
private void CreateOrShow()
{
// if the form is not closed, show it
if (_childForm == null || _childFom.IsDisposed )
{
_childForm = new ChildForm();
// attach the handler
_childForm.FormClosed += ChildFormClosed;
}
// show it
_childForm.Show();
}
// when the form closes, detach the handler and clear the field
void ChildFormClosed(object sender, FormClosedEventArgs args)
{
// detach the handler
_childForm.FormClosed -= ChildFormClosed;
// let GC collect it (and this way we can tell if it's closed)
_childForm = null;
}
.