2

this.Close()を使用して、閉じたフォームを再び開くにはどうすればよいのでしょうか。Mainmenu.Show()を使用して閉じたフォームを開こうとするたびに、例外は「破棄されたオブジェクトにアクセスできません。オブジェクト名:Mainmenu」というエラーをスローします。

どうすれば再び開くことができますか?

4

4 に答える 4

2

Closeメソッドがで呼び出された場合、フォームのリソースはすでに解放されているため、フォームを表示するためにメソッドをForm呼び出すことはできません。フォームを非表示にしてから表示するには、Control.Hideメソッドを使用します。ShowDisposed

MSDNから

閉じたフォームを再度開く場合は、最初に作成したのと同じ方法でフォームを再作成する必要があります。

YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();
于 2012-03-10T08:01:44.413 に答える
2

非モーダルの子フォームを作成するメインフォームがあると思います。この子フォームはメインフォームとは独立して閉じることができるため、次の2つのシナリオがあります。

  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;
    }
}
于 2012-03-10T08:23:37.570 に答える
0

閉じたフォームを表示することはできません。this.Hide()を呼び出して、フォームを閉じることができます。後でform.Show();を呼び出すことができます。

それか、フォームをもう一度作成する必要があります。

于 2012-03-10T08:14:27.570 に答える
0

上記のスマートに提示されたコードへの小さな追加

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;
}
于 2014-10-04T17:29:59.627 に答える