无法在C#中打开和关闭MDI表单内的窗体

无法在C#中打开和关闭MDI表单内的窗体

问题描述:

我目前使用的是MDI Parent Form,在其中我将打开Form,方法是单击ToolStripMenuItem中的其中一项。我有一个代码,允许我只打开一次该项目,而不是打开多个Forms无法在C#中打开和关闭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(); 
} 

到目前为止好,但随后关闭FormMDI Parent Form内并尝试再次打开同一createToolStripMenuItem它会显示我的错误

无法访问已释放的对象之后。对象的名称:“frmRegUser”

然后我搜索一下,并试图用frmRegUser closing event把这段代码的内部代码:

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

它不会打开窗体再次,如果我也想要。

你有什么想法我该如何解决这个问题?

+0

什么是“不也工作”是什么意思?当然,如果没有'close'事件处理程序,那么'frm'在关闭时会被放置。通过该处理程序,您可以通过_hiding_形式而不是_closing_来避免这种情况。也许你不应该把'Parent'设置为null或者在再次显示时重置它。 –

+0

它通过删除'this.Parent = null;'line @RenéVogt – Rekcs

+0

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

该问题已通过从frmRegUser_FormClosing事件中删除this.Parent = null;解决。

试试这个,确保它的设置初始化之前:

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

当我打开表单并尝试关闭“X”中的应用程序时,它会首先关闭“表单” – Rekcs