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

时间:2018-10-31 10:59:33

标签: c# winforms panel

我做了什么
我有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();
    }
}

1 个答案:

答案 0 :(得分:0)

从面板上清除控件后,您应该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()之前,以查看详细信息。