清除面板控件无法调用 Form.Close(或)Form.Leave 事件
Clearing Panel controls fail to call Form.Close (or) Form.Leave events
我做了什么:
我有 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();
}
}
您应该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()
之前,详情请查看评论
我做了什么:
我有 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();
}
}
您应该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()
之前,详情请查看评论