Вопрос

Мне интересно, как я могу снова открыть закрытую форму с помощью this.Close().Каждый раз, когда я пытаюсь открыть закрытую форму с помощью Mainmenu.Show(), исключение выдает ошибку «невозможно получить доступ к удаленному объекту».Имя объекта:Главное меню".

Как я могу открыть его снова?

Это было полезно?

Решение

Когда Close метод вызывается на Form ты не можешь позвонить в Show метод, позволяющий сделать форму видимой, поскольку ресурсы формы уже освобождены, т.е. Disposed.Чтобы скрыть форму, а затем сделать ее видимой, используйте метод Control.Hide.

из MSDN

Если вы хотите повторно открыть закрытую форму, вам необходимо заново создать ее так же, как вы создавали сначала:

YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();

Другие советы

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

  1. Дочерняя форма еще не была создана, или она была закрыта. В данном случае, создайте форму и покажи это.
  2. Дочерняя форма уже запущена. В этом случае вам нужно только показать его (он может быть свернут, и вы захотите его восстановить).

По сути, ваша основная форма должна отслеживать время жизни дочерней формы, обрабатывая ее 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;
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top