Hola:
Espero esto te ayude, en esta pc no tengo el Visual Studio, aun asi la lógica es la siguiente.
Te aconsejaria que utilices (TaControl y PanelControl)
1. Coloca 1 panel en tu formulario, dale las propiedades de Dock (Fill)
2. Añade un TabControl (TabContainer) sin fichas
3. Declara los nombres de tus formularios en un Modulo:
Public frmAlgo as FormAlgo
Public frmAlgo2 as FormAlgo2
4. Crea 2 Metodos en tu Form MDI:
Private tabFicha As System.Windows.Forms.TabPage
Sub InsertaFicha(frm as Form)
For Each Tpg as TabPage in Me.TabContainer.TabPages
If tpg.Name="tb" & frm.Name then
'traemos al frente la ficha porque ya existe
me.tabContainer.SelectedTab= "tb" & frm.Name
else
TabFicha=New System.Windows.Forms.TabPage()
TabFicha.Name="tb" & frm.Name
frm.SuspendLayout
frm.TopLevel=False
TabFicha.Controls.Add(frmAlgo)
frm.ResumeLayout
Me.TabContainer.TabPages.add(TabFicha)
End If
Next
End Sub
Sub EliminaFicha(frm as Form)
For Each Tpg as TabPage in Me.TabContainer.TabPages
If tpg.Name="tb" & frm.Name then
Me.TabContainer.Remove(tpg)
Exit For
End If
Next
End Sub
5. Cada vez que abras el form mediante el menu o un boton llamas al metodo InsertaFicha si no existe la ficha y deshabilita el item del menu que llamo al formulario. Si exsite la ficha solo activala y traela al frente.
6. Para eliminar una ficha debes buscarla en el tabControl y eliminas su contenido (Form) que tiene dentro y luego la ficha en si.
7. Llamas a las funciones asi:
Ejm. Menu
Forms
Abrir FormAlgo
'Aqui creas el new del frmAlgo. lo colocas como hijo del mdi y lo agregas al TabContainer
InsertaFicha (frmAlgo)
Y para elminar usas el boton cerrar de tu form que llame al removeFicha, o te creas un boton en tu MDI (barra de herramientas que cierre la ficha actual)