Элементы управления панели очистки не могут вызывать события Form.Close (или) Form.Leave - PullRequest
0 голосов
/ 31 октября 2018

Что я сделал :
У меня есть 3 Forms, в котором у меня есть панель в Form_1 и 2 кнопки (button_1, button_2).

button_1 событие клика добавляет панель Form_2 в. (раньше, если я уберу Panel элементы управления) button_2 событие клика добавляет панель Form_3 в. (раньше, если я уберу элементы управления Panel)

Что я ищу :
В Form_2 и Form_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 голосов
/ 31 октября 2018

Вы должны 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();
    }
}

Благодаря Jimi frmChild.Dispose() перемещено до panelBody.Controls.Clear(), для получения подробной информации проверьте комментарии

...