2017-08-31 9 views
2

私は現在MDI Parent Formを使用していますが、の項目の1つをクリックしてFormを開きます。私は複数のアイテムを開くのではなく、そのアイテムを開くことができるコードを持っていますFormsC#でMDIフォーム内のフォームを開く/閉じることができません

frmRegUser frm = null; 

private void createToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (frm == null) 
    { 
     frm = new frmRegUser(); 
     frm.MdiParent = this; 
    } 
    frm.WindowState = System.Windows.Forms.FormWindowState.Maximized; 
    frm.Show(); 
} 

これまでのところは良いが、その後MDI Parent Formの内側Formを閉じて、もう一度同じcreateToolStripMenuItemを開こうとした後、それは誤り

が配置されたオブジェクトにアクセスすることはできません私を表示します。オブジェクトの名前:「frmRegUser」

その後、私はそれについて検索し、このコードを入れfrmRegUser closing eventの内のコードを使用しようとしました:

this.Hide(); 
this.Parent = null; 
e.Cancel = true; 

I場合には、フォームを再度開くことができません欲しい

あなたはどのようなイデアを持っていますかこの問題を解決するにはどうすればよいですか?

+0

意味「あまりにも機能していない」んか?もちろん、 'Close'イベントハンドラがなければ、' frm'は閉じられたときに破棄されます。そのハンドラでは、_closing_の代わりにフォームを隠すことで回避します。たぶんあなたは 'Parent'をヌルに設定したり、再度表示する際にリセットしたりしないでください。 –

+0

これは、 'this.Parent = null;'行を削除することで問題を解決しました。@RenéVogt – Rekcs

+0

frm.FormClosed + = delegate {frm = null; }; –

答えて

2

frmRegUser_FormClosingイベントからthis.Parent = null;を削除することで問題は解決しました。

0

は、あなたが初期化する前に、それが配置されていますことを確認し、これを試してみてください:

if (frm == null || frm.IsDisposed) 
+0

フォームを開いて「X」でアプリケーションを終了しようとすると、最初に 'Form'を閉じます – Rekcs

関連する問題