質問

この.close()を使用して閉じたフォームをどのように開くことができるか疑問に思います。mainmenu.show()を使用してクローズドフォームを開こうとしているたびに、例外は「配置されたオブジェクトにアクセスできない」エラーをスローします。オブジェクト名:MainMenu "。

どのように私は再び開くことができますか?

役に立ちましたか?

解決

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

from msdn

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

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

他のヒント

私はあなたが主な形式を持っていると推定します。これは、非モーダルの子フォームを作成します。この子フォームはメインワンから独立して閉じることができますので、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;
        }
    }
    
    .

閉じた形式を表示することはできません。 この.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