How to: Create MDI Child Forms
Important
This topic uses the MainMenu control, which has been replaced by the MenuStrip control. The MainMenu control is retained for both backward compatibility and future use, if you choose. For information about creating a MDI parent Form by using a MenuStrip, see How to: Create an MDI Window List with MenuStrip (Windows Forms).
MDI child forms are an essential element of Multiple-Document Interface (MDI) Applications, as these forms are the center of user interaction.
In the following procedure, you will create MDI child forms that display a RichTextBox control, similar to most word-processing applications. Substituting the System.Windows.Forms control with other controls, such as the DataGridView control, or a mixture of controls enables you to create MDI child windows (and, by extension, MDI applications) with diverse possibilities.
Note
The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. To change your settings, choose Import and Export Settings on the Tools menu. For more information, see Working with Settings.
To create MDI child forms
Create an MDI parent form that has a menu structure containing File and Window top-level menu items and New and Close menu items. For more information about creating MDI parent forms, see How to: Create MDI Parent Forms.
In the drop-down list at the top of the Properties window, select the menu item that corresponds to the &Window menu item and set the MdiList property to true.
This will enable the Window menu to maintain a list of open MDI child windows with a check mark next to the active child window.
In Solution Explorer, right-click the project, point to Add, and then select Add New Item.
This form will be the template for your MDI child forms.
Note
The MDI child form you create in this step is a standard Windows Form. As such, it has an Opacity property, which enables you to control the transparency of the form. However, the Opacity property was designed for top-level windows. Do not use it with MDI child forms, as painting problems can occur.
In the Add New Item dialog box, select Windows Form (in Visual Basic or in Visual C#) or Windows Forms Application (.NET) (in Visual C++) from the Templates pane. In the Name box, name the form Form2. Click the Open button to add the form to the project.
The Windows Forms Designer opens, displaying Form2.
From the Toolbox, drag a RichTextBox control to the form.
In the Properties window, set the Anchor property to Top, Left and the Dock property to Fill.
This causes the RichTextBox control to completely fill the area of the MDI child form, even when the form is resized.
Create a Click event handler for the New menu item. For more information about creating event handlers, see How to: Create Event Handlers Using the Designer.
Insert code similar to the following to create a new MDI child form when the user clicks the New menu item.
Note
In the following example, the event handler handles the Click event for MenuItem2. Be aware that, depending on the specifics of your application architecture, your New menu item may not be MenuItem2.
Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click Dim NewMDIChild As New Form2() 'Set the Parent Form of the Child window. NewMDIChild.MdiParent = Me 'Display the new form. NewMDIChild.Show() End Sub
protected void MDIChildNew_Click(object sender, System.EventArgs e){ Form2 newMDIChild = new Form2(); // Set the Parent Form of the Child window. newMDIChild.MdiParent = this; // Display the new form. newMDIChild.Show(); }
private: void menuItem2_Click(System::Object ^ sender, System::EventArgs ^ e) { Form2^ newMDIChild = gcnew Form2(); // Set the Parent Form of the Child window. newMDIChild->MdiParent = this; // Display the new form. newMDIChild->Show(); }
In Visual C++, add the following #include directive at the top of Form1.h:
#include "Form2.h"
Press F5 to run the application. By selecting New from the File menu, you can create new MDI child forms, which are kept track of in the Window menu.
Note
When an MDI child form has a MainMenu component (with, usually, a menu structure of menu items) and it is opened within an MDI parent form that has a MainMenu component (with, usually, a menu structure of menu items), the menu items will merge automatically if you have set the MergeType property (and optionally, the MergeOrder property). Set the MergeType property of both MainMenu components and all of the menu items of the child form to MergeItems. Additionally, set the MergeOrder property so that the menu items from both menus appear in the desired order. Moreover, keep in mind that when you close an MDI parent form, each of the MDI child forms raises a Closing event before the Closing event for the MDI parent is raised. Canceling an MDI child's Closing event will not prevent the MDI parent's Closing event from being raised; however, the CancelEventArgs argument for the MDI parent's Closing event will now be set to true. You can force the MDI parent and all MDI child forms to close by setting the CancelEventArgs argument to false.
See Also
Tasks
How to: Create MDI Parent Forms
How to: Determine the Active MDI Child
How to: Send Data to the Active MDI Child
How to: Arrange MDI Child Forms