Is there an event I can use to tell if a child form has been added or removed from the MDI parent?
I realised this is many years too late however as the answers here helped me solve this I though I would mention this works fine using the MdiChildren array in .net 4. The only thing you need to do is check if the form is disposing or disposed to tell if its closing.
ie:
private void frmContainer_MdiChildActivate(object sender, EventArgs e)
{
tabWindows.RefreshLayout(this.MdiChildren.ToList());
}
public void RefreshLayout(List<Form> forms)
{
this.nextButtonLeft = 1;
panel1.Controls.Clear();
foreach (Form frm in forms)
{
if (!(frm.Disposing || frm.IsDisposed)) { addButton(frm); }
}
}
Yes. On your main MDI form, wire up to the MdiChildActivated Event.
Like so:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.MdiChildActivate += new EventHandler(Form1_MdiChildActivate);
}
void Form1_MdiChildActivate(object sender, EventArgs e)
{
MessageBox.Show("Activated");
}
private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
Form form2 = new Form2();
form2.MdiParent = this;
form2.Show();
}
}
And that event will fire when the child form is both activated or deactivated.