Pergunta

Estou me perguntando como posso abrir novamente o formulário fechado usando this.Close ().Toda vez que tento abrir o formulário fechado usando Mainmenu.Show(), a exceção gera um erro "não é possível acessar o objeto descartado.Nome do objeto:Menu principal".

Como posso abri-lo novamente?

Foi útil?

Solução

Quando o Close método é chamado em um Form você não pode ligar para o Show método para tornar o formulário visível, porque os recursos do formulário já foram liberados, também conhecido como Disposed.Para ocultar um formulário e torná-lo visível, use o método Control.Hide.

do MSDN

Se quiser reabrir um formulário que foi fechado, você precisa recriá-lo novamente da mesma forma que o criou inicialmente:

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

Outras dicas

Presumo que você tenha um formulário principal, que cria um formulário filho não modal.Como este formulário filho pode ser fechado independentemente do formulário principal, você pode ter dois cenários:

  1. O formulário filho ainda não foi criado ou foi fechado. Nesse caso, crie o formulário e mostre isso.
  2. O formulário filho já está em execução. Neste caso, basta mostrá-lo (pode estar minimizado e você desejará restaurá-lo).

Basicamente, seu formulário principal deve acompanhar o tempo de vida do formulário filho, manipulando seus FormClosed evento:

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;
    }
}

Você não pode mostrar um formulário fechado. Você pode chamar isso.hide () para fechar o formulário. Mais tarde você pode chamar form.show ();

ou isso ou você precisa criar o formulário novamente.

Pequena adição ao código inteligente apresentado acima

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top