我有2个Mdi子窗体(form2和form3),它在父窗口(form1)中打开,在一个子窗体(form3)上打开我有一个UDP套接字,当我从父窗口打开另一个子窗体(form2)时UDP套接字保持打开状态,“在表单关闭”事件处理程序不会触发,因为我没有正确退出子进程,所以当我重新打开它时,我得到错误“每个套接字地址只有一次使用(协议/网络地址/端口)通常是允许的“即使Parent可以检测到孩子正在关闭,它如何关闭仅在子(form3)上可用的套接字(udpClient.Close();)。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
ActiveMdiChild.Close();
panel1.Controls.Clear();
panel1.Invalidate();
Form2 newMDIChild = new Form2();
newMDIChild.TopLevel = false;
newMDIChild.AutoScroll = true;
this.panel1.Controls.Add(newMDIChild);
newMDIChild.Show();
}
private void button3_Click(object sender, EventArgs e)
{
if (ActiveMdiChild != null)
ActiveMdiChild.Close();
panel1.Controls.Clear();
panel1.Invalidate();
Form3 newMDIChild = new Form3();
newMDIChild.TopLevel = false;
newMDIChild.AutoScroll = true;
this.panel1.Controls.Add(newMDIChild);
newMDIChild.Show();
Form3 mdiChild = new Form3();
}
}
上面的代码只清除前一个子节点的面板,但在面板上打开一个新子节点之前,没有在特定子节点上打开的任何套接字或com端口。