我使用以下方法从MainForm创建一个新的MdiChild:
AdminLogInForm adminForm;
private void LogInAsAdminMenuItem_Click(object sender, EventArgs e)
{
if (adminForm == null)
{
adminForm = new AdminLogInForm();
adminForm.MdiParent = this;
adminForm.Show();
adminForm.Dock = DockStyle.Fill;
adminForm.BringToFront();
LogInAsAdminMenuItem.Enabled = false;
}
else
{
adminForm.Activate();
adminForm.BringToFront();
}
}为什么当我关闭我的孩子,使用chld形式的"this.close()“,使用那个方法,我不能再打开它了?
在那里我调用close();
private void cancelLogInButton_Click(object sender, EventArgs e)
{
this.MdiParent.Activate();
if(this.MdiParent!=null)
((MainForm)this.MdiParent).LogInAsAdminMenuItem.Enabled = true;
this.Close();
}顺便说一句,为了做我之前要求的工作,我必须在所有语句之后加上this.Close();
发布于 2012-04-26 13:05:29
通过关闭表单,您不会将adminForm实例设置为null (这是您的if条件在您下次尝试打开它时将检查的内容)。
在表单的基础上,设置adminForm = null,然后您的if条件将在下一次工作。
private void LogInAsAdminMenuItem_Click(object sender, EventArgs e)
{
if (adminForm == null)
{
adminForm = new AdminLogInForm(this);
adminForm.Disposed += new EventHandler(adminForm_Disposed); //Add Disposed EventHandler
adminForm.MdiParent = this;
adminForm.Show();
adminForm.Dock = DockStyle.Fill;
adminForm.BringToFront();
LogInAsAdminMenuItem.Enabled = false;
}
else
{
adminForm.Activate();
adminForm.BringToFront();
}
}
void adminForm_Disposed(object sender, EventArgs e)
{
adminForm = null;
}发布于 2012-05-12 06:33:39
正如Marshal所描述的那样,关闭窗体会使其被释放,您还应该添加一个用于释放的条件,如下所示
AdminLogInForm adminForm;
private void LogInAsAdminMenuItem_Click(object sender, EventArgs e)
{
if (adminForm == null || adminForm.IsDisposed)
{
adminForm = new AdminLogInForm();
adminForm.MdiParent = this;
adminForm.Show();
adminForm.Dock = DockStyle.Fill;
adminForm.BringToFront();
LogInAsAdminMenuItem.Enabled = false;
}
else
{
adminForm.Activate();
adminForm.BringToFront();
}
}或者,您也可以创建一个函数以将窗体用作mdi like this。
https://stackoverflow.com/questions/10327441
复制相似问题