
Introduction
MDI child forms on tab page like Internet Explorer 7. So easy to use and a little
code necessary.
Using the code
First, set isMDIContainer property of the parent
form to true. Add a TabControl
component to the main form and set the Dock property
to Top. Delete all tab pages of TabControl and
set the Name property to
tabForms and set the Visible property to false.
No any code necessary for child forms. All codes in main forms.
When the MDI Child Form is activated;
if child form has a tab page, activate the corresponding tab page
else create a tab page for child form and select tab
page.
private void Form1_MdiChildActivate(object sender,
EventArgs e)
{
if (this.ActiveMdiChild == null)
tabForms.Visible = false;
else
{
this.ActiveMdiChild.WindowState =
FormWindowState.Maximized;
if (this.ActiveMdiChild.Tag == null)
{
TabPage tp = new TabPage(this.ActiveMdiChild
.Text);
tp.Tag = this.ActiveMdiChild;
tp.Parent = tabForms;
tabForms.SelectedTab = tp;
this.ActiveMdiChild.Tag = tp;
this.ActiveMdiChild.FormClosed +=
new FormClosedEventHandler(
ActiveMdiChild_FormClosed);
}
if (!tabForms.Visible) tabForms.Visible = true;
}
}
When the MDI Child Form is closing, destroy the corresponding tab page. Add the
following code to main form.
private void ActiveMdiChild_FormClosed(object sender,
FormClosedEventArgs e)
{
((sender as Form).Tag as TabPage).Dispose();
}
When a tab page selected, activate its child form
private void tabForms_SelectedIndexChanged(object sender,
EventArgs e)
{
if ((tabForms.SelectedTab != null) &&
(tabForms.SelectedTab.Tag != null))
(tabForms.SelectedTab.Tag as Form).Select();
}