閉じたフォームを開きます
-
10-12-2019 - |
質問
この.close()を使用して閉じたフォームをどのように開くことができるか疑問に思います。mainmenu.show()を使用してクローズドフォームを開こうとしているたびに、例外は「配置されたオブジェクトにアクセスできない」エラーをスローします。オブジェクト名:MainMenu "。
どのように私は再び開くことができますか?
解決
Close
で呼び出された場合、Formのリソースが既に解放されているため、Form
メソッドを呼び出して、フォームのShow
が解放されているため、Disposed
メソッドを呼び出すことはできません。フォームを隠してから表示させるには、Control.hideメソッドを使用します。
閉じられたフォームを再開始したい場合は、最初に作成したのと同じ方法で再度再作成する必要があります。
YourFormType Mainmenu=new YourFormType();
Mainmenu.Show();
. 他のヒント
私はあなたが主な形式を持っていると推定します。これは、非モーダルの子フォームを作成します。この子フォームはメインワンから独立して閉じることができますので、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;
}
. 所属していません StackOverflow