Откройте закрытую форму - PullRequest
2 голосов
/ 10 марта 2012

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

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

Ответы [ 4 ]

3 голосов
/ 10 марта 2012

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

из MSDN

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

YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();
2 голосов
/ 10 марта 2012

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

  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;
    }
}
0 голосов
/ 04 октября 2014

Небольшое дополнение к представленному смарт-коду выше

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;
}
0 голосов
/ 10 марта 2012

Вы не можете показать закрытую форму.Вы можете вызвать это. Скрыть (), чтобы закрыть форму.Позже вы можете вызвать form.Show ();

Либо так, либо вам нужно создать форму заново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...