I have tinkered with using a tab control to keep track of open MDI child forms. This has been part of my introduction to .NET, coming from the VB6 needed to find out how to do the basics.
My team is working on rewriting a large legacy application, and we have been working on getting a GUI framework set out. We didn't want the child forms appearing on the Windows task bar, but still wanted users to be able to switch between forms in a similar manner.
The tab control has all the functionality, look and feel we were looking for. What we needed was a way to link forms to the tab pages. So we created a private variable as a
TabPage object to hold the tab page, basically the description of the form.
How do we get this tab page onto the tab control which is located on the MDI form. Enter stage left, property
Friend function identifier.
When the child form loads we set a variable to the
ParentForm of the child form, which leads to the MDI form. On the MDI form we have two functions,
Friend Sub AddTabPage(ByVal tp As TabPage)
.SelectedTab = tp
Friend Sub RemoveTabPage(ByVal tp As TabPage)
Friend identifier allows the methods to be called from child forms. So when the child form loads we call the
AddTabPage, and when the form closes we call
Private Sub Form2_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
pForm = Me.ParentForm
Private Sub Form2_Closing(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
What to do when the tab control pages change? We have used minimizing and maximizing of the child forms. Since the MDI children and the tab pages are managed in parallel, the index of the
MDIChildren collection corresponds to the tab pages. So all we need to do is maximize the form which corresponds to the index of the tab page selected.
Private Sub TabControl1_SelectedIndexChanged( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Dim i As Integer
If TabControl1.TabPages.Count > 0 Then
For i = 0 To Me.MdiChildren.Length - 1
If i = TabControl1.SelectedIndex Then
Me.MdiChildren(i).WindowState = FormWindowState.Maximized
Me.MdiChildren(i).WindowState = FormWindowState.Minimized
This seems to work for us, we thought it was very simple and couldn't find anything similar out there.