清除面板控件无法调用 Form.Close(或)Form.Leave 事件

Clearing Panel controls fail to call Form.Close (or) Form.Leave events

我做了什么:
我有 3 个 Forms,其中我有面板 Form_1 和 2 个按钮(button_1button_2)。

button_1点击事件在面板中添加Form_2。 (在我清除 Panel 控件之前) button_2点击事件在面板中添加Form_3。 (在我清除 Panel 控件之前)

我要找的东西:
Form_2Form_3 中,我有 Form.closing()Form.Leave() 事件,但没有调用此函数。

我在Form_2中打开了串口,但无法正常关闭。

这是我的代码:

public partial class Form_1 : Form
{
    public Form_1()
    {
        InitializeComponent();
    }

    private void button_1_Click(object sender, EventArgs e)
    {
        Form_2 ObjForm_2 = new Form_2();
        panelBody.Controls.Clear();
        panelBody.Refresh();

        if (ObjForm_2.IsDisposed)
        {
            ObjForm_2 = new Form_2();
        }
        ObjForm_2.TopLevel = false;
        ObjForm_2.FormBorderStyle = FormBorderStyle.None;
        ObjForm_2.Dock = DockStyle.Fill;
        panelBody.Controls.Add(ObjForm_2);
        ObjForm_2.Show();
    }

    private void button_1_Click(object sender, EventArgs e)
    {
        Form_3 ObjForm_3 = new Form_3();
        panelBody.Controls.Clear();
        panelBody.Refresh();

        if (ObjForm_3.IsDisposed)
        {
            ObjForm_3 = new Form_3();
        }
        ObjForm_3.TopLevel = false;
        ObjForm_3.FormBorderStyle = FormBorderStyle.None;
        ObjForm_3.Dock = DockStyle.Fill;
        panelBody.Controls.Add(ObjForm_3);
        ObjForm_3.Show();
    }
}

您应该Close清除面板上的控件后的表单。

public partial class Form_1 : Form
{
    private Form frmChild;
    public Form_1()
    {
        InitializeComponent();
    }

    private void button_1_Click(object sender, EventArgs e)
    {

        if (frmChild != null)
        {
            frmChild.Close();
            frmChild.Dispose();
        }
        panelBody.Controls.Clear();

        frmChild = new Form_2();
        frmChild.TopLevel = false;
        frmChild.FormBorderStyle = FormBorderStyle.None;
        frmChild.Dock = DockStyle.Fill;
        panelBody.Controls.Add(frmChild);
        frmChild.Show();
    }

    private void button_1_Click(object sender, EventArgs e)
    {
        panelBody.Controls.Clear();

        if (frmChild != null)
        {
            frmChild.Close();
            frmChild.Dispose();
        }
        panelBody.Controls.Clear();

        frmChild = new Form_3();
        frmChild.TopLevel = false;
        frmChild.FormBorderStyle = FormBorderStyle.None;
        frmChild.Dock = DockStyle.Fill;
        panelBody.Controls.Add(frmChild);
        frmChild.Show();
    }
}

多亏了 JimifrmChild.Dispose() 移到了 panelBody.Controls.Clear() 之前,详情请查看评论