this.Close()を使用して、閉じたフォームを再び開くにはどうすればよいのでしょうか。Mainmenu.Show()を使用して閉じたフォームを開こうとするたびに、例外は「破棄されたオブジェクトにアクセスできません。オブジェクト名:Mainmenu」というエラーをスローします。
どうすれば再び開くことができますか?
this.Close()を使用して、閉じたフォームを再び開くにはどうすればよいのでしょうか。Mainmenu.Show()を使用して閉じたフォームを開こうとするたびに、例外は「破棄されたオブジェクトにアクセスできません。オブジェクト名:Mainmenu」というエラーをスローします。
どうすれば再び開くことができますか?
Close
メソッドがで呼び出された場合、フォームのリソースはすでに解放されているため、フォームを表示するためにメソッドをForm
呼び出すことはできません。フォームを非表示にしてから表示するには、Control.Hideメソッドを使用します。Show
Disposed
閉じたフォームを再度開く場合は、最初に作成したのと同じ方法でフォームを再作成する必要があります。
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;
}
}
閉じたフォームを表示することはできません。this.Hide()を呼び出して、フォームを閉じることができます。後でform.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;
}