C# 关闭MDI子对象

C# 关闭MDI子对象,c#,winforms,mdi,C#,Winforms,Mdi,您好,目前我正在处理一个MDI应用程序。在此应用程序中,我的主窗体是MDI父窗体。通过它,我转到MDI子窗体。现在,当子窗体中的所有功能完成时,会出现一个messagebox,单击messagebox的OK(确定),我的子窗体应该关闭,我应该转到主窗体。我的子窗体正在关闭。但现在发生的是,为了访问主窗体,我正在创建父窗体的新实例。因此有两种主要形式是开放的。 这是代码,请帮忙 private void btnsave_Click_1(object sender, EventArgs e) {

您好,目前我正在处理一个MDI应用程序。在此应用程序中,我的主窗体是MDI父窗体。通过它,我转到MDI子窗体。现在,当子窗体中的所有功能完成时,会出现一个messagebox,单击messagebox的OK(确定),我的子窗体应该关闭,我应该转到主窗体。我的子窗体正在关闭。但现在发生的是,为了访问主窗体,我正在创建父窗体的新实例。因此有两种主要形式是开放的。 这是代码,请帮忙

private void btnsave_Click_1(object sender, EventArgs e)
{
    DialogResult dialogResult = 
        MessageBox.Show("record saved", "requisition", MessageBoxButtons.OK, MessageBoxIcon.Information);
    if (dialogResult == DialogResult.OK)
    {

        //frmmain main = new frmmain();
        //main.Show();
        this.Close();
    }
    else
        MessageBox.Show("error", "requisition", MessageBoxButtons.OK, MessageBoxIcon.Error);
    conn.Close();
}

您要做的是在
main表单中

using (MdiChildForm form = new MdiChildForm())
{
    form.Showdialog();
}
要在单击
MessageBox
OK按钮后关闭
MdiChildForm
,请在需要的某些事件处理程序中

DialogResult dlgRes = MessageBox.Show("record saved", "requisition", 
    MessageBoxButtons.OK, MessageBoxIcon.Information);
if (dlgRes == DialogResult.OK)
    this.Close();
这将使控件返回到
main窗体
。就这么简单。如果您得到两个
MainForm
s,那么有些事情您没有告诉我们。如果
MainForm
是隐藏的,即执行
MainForm.Hide()
在某个时刻,然后在关闭
MdiChild
之前,执行
this.mdipart.Show()


我希望这能有所帮助。

只需隐藏您的MDI孩子,如果您真的不再需要它,请销毁它“这”的上下文是什么。是MdiChild吗?子窗体没有问题。close()正在关闭子窗体。我只想返回到父窗体,而不创建该窗体的新实例;main.show();这是在创建主窗体的另一个实例。我已经编写了该代码。不要这样做。易于理解的当子窗体关闭时,它将返回到父窗体。