方法: MDI 子フォームを作成するHow to: Create MDI child forms

MDI 子フォームは、ユーザー操作の中心であるため、マルチドキュメントインターフェイス (mdi) アプリケーションの重要な要素です。MDI child forms are an essential element of Multiple-Document Interface (MDI) applications, as these forms are the center of user interaction.

次の手順では、Visual Studio を使用して、ほとんどのワードプロセッシングアプリケーションとRichTextBox同様に、コントロールを表示する MDI 子フォームを作成します。In the following procedure, you'll use Visual Studio to create an MDI child form that displays a RichTextBox control, similar to most word-processing applications. コントロールをDataGridViewコントロールSystem.Windows.Formsやコントロールの組み合わせなどの他のコントロールに置き換えることにより、さまざまな可能性を持つ mdi 子ウィンドウ (および拡張機能、mdi アプリケーション) を作成できます。By substituting the System.Windows.Forms control with other controls, such as the DataGridView control, or a mixture of controls, you can create MDI child windows (and, by extension, MDI applications) with diverse possibilities.

MDI 子フォームを作成するCreate MDI child forms

  1. Visual Studio で新しい Windows フォームアプリケーションプロジェクトを作成します。Create a new Windows Forms application project in Visual Studio. フォームの [プロパティ] ウィンドウでIsMdiContainerWindowsStateプロパティをにtrue 、プロパティをにMaximized設定します。In the Properties window for the form, set its IsMdiContainer property to true and its WindowsState property to Maximized.

    これによって、フォームが子ウィンドウの MDI コンテナーとして指定されます。This designates the form as an MDI container for child windows.

  2. Toolbox から、MenuStrip コントロールをフォームにドラッグします。From the Toolbox, drag a MenuStrip control to the form. そのTextプロパティをFileに設定します。Set its Text property to File.

  3. Itemsプロパティの横にある省略記号 ([...]) をクリックし、[追加] をクリックして、2つの子ツールストリップメニュー項目を追加します。Click the ellipsis (…) next to the Items property, and click Add to add two child tool strip menu items. これらの項目の プロパティを新規およびウィンドウに設定しTextます。Set the Text property for these items to New and Window.

  4. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [追加] > [新しい項目] を選択します。In Solution Explorer, right-click the project, and then select Add > New Item.

  5. [新しい項目の追加] ダイアログボックスで、[ Windows フォーム] (Visual Basic またC#は visual では) を選択するか、 C++[テンプレート] ペインの [アプリケーション (.net) ] (visual の場合) を Windows フォームます。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. [名前] ボックスに、「 Form2」という形式で名前を指定します。In the Name box, name the form Form2. [開く] を選択して、フォームをプロジェクトに追加します。Select Open to add the form to the project.

    注意

    この手順で作成した、MDI 子フォームは、標準の Windows フォームです。The MDI child form you created in this step is a standard Windows Form. そのため、フォームの透明度を制御できる Opacity プロパティを持っています。As such, it has an Opacity property, which enables you to control the transparency of the form. ただし、Opacity プロパティは最上位レベルのウィンドウ用に設計されています。However, the Opacity property was designed for top-level windows. 描画に関する問題が発生する可能性があるため、MDI 子フォームと共に使用しないでください。Do not use it with MDI child forms, as painting problems can occur.

    このフォームは、MDI 子フォーム用のテンプレートになります。This form will be the template for your MDI child forms.

    Windows フォームデザイナーが開き、 Form2が表示されます。The Windows Forms Designer opens, displaying Form2.

  6. ツールボックスから、 RichTextBoxコントロールをフォームにドラッグします。From the Toolbox, drag a RichTextBox control to the form.

  7. [プロパティ] ウィンドウAnchorで、プロパティを [ Dock上]、[左]、プロパティを [塗りつぶし] に設定します。In the Properties window, set the Anchor property to Top, Left and the Dock property to Fill.

    これにより、フォームがサイズ変更された場合でも、RichTextBox コントロールが MDI 子フォームの領域を完全に塗りつぶします。This causes the RichTextBox control to completely fill the area of the MDI child form, even when the form is resized.

  8. [新規] メニュー項目をダブルクリックしClickて、そのイベントハンドラーを作成します。Double click the New menu item to create a Click event handler for it.

  9. 次のようなコードを挿入して、ユーザーが [新規] メニュー項目をクリックしたときに新しい MDI 子フォームを作成します。Insert code similar to the following to create a new MDI child form when the user clicks the New menu item.

    注意

    次の例では、イベント ハンドラーが MenuItem2Click イベントを処理します。In the following example, the event handler handles the Click event for MenuItem2. アプリケーションアーキテクチャの詳細によっては、新しいメニュー項目が表示さ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();
       }
    

    でC++、Form1 の先頭#includeに次のディレクティブを追加します。In C++, add the following #include directive at the top of Form1.h:

    #include "Form2.h"
    
  10. [プロパティ] ウィンドウの上部にあるドロップダウンリストで、[ファイル] メニューストリップに対応するメニューストリップを選択MdiWindowListItemし、プロパティをウィンドウToolStripMenuItemに設定します。In the drop-down list at the top of the Properties window, select the menu strip that corresponds to the File menu strip and set the MdiWindowListItem property to the Window ToolStripMenuItem.

    これにより、ウィンドウメニューで、アクティブな子ウィンドウの横にチェックマークが付いた、開いている MDI 子ウィンドウの一覧を保持できます。This enables the Window menu to maintain a list of open MDI child windows with a check mark next to the active child window.

  11. F5 キーを押してアプリケーションを実行します。Press F5 to run the application. [ファイル] メニューの [新規作成] を選択すると、新しい MDI 子フォームを作成できます。この子フォームは、[ウィンドウ] メニュー項目に記録されます。By selecting New from the File menu, you can create new MDI child forms, which are kept track of in the Window menu item.

    注意

    MDI 子フォームが (通常はメニュー項目のメニュー構造を持つ) MainMenu コンポーネントを持っていて、(通常はメニュー項目のメニュー構造を持つ) MainMenu コンポーネントを持つ MDI 親フォーム内で開いている場合、MergeType プロパティ (およびオプションで MergeOrder プロパティ) を設定した場合に、メニュー項目が自動的にマージされます。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). 両方の MainMenu コンポーネント、および子フォームのすべてのメニュー項目の MergeType プロパティを MergeItems に設定します。Set the MergeType property of both MainMenu components and all of the menu items of the child form to MergeItems. また、MergeOrder プロパティを設定し、両方のメニューのメニュー項目が指定した順序で表示されるようにします。Additionally, set the MergeOrder property so that the menu items from both menus appear in the desired order. さらに、MDI 親フォームを閉じた時に、MDI 親の Closing イベントが発生する前に、各 MDI 子フォームが Closing イベントを発生させます。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. MDI 子の Closing イベントをキャンセルしても、MDI 親の Closing イベントの発生を防ぐことはできません。ただし、MDI 親の Closing イベントの CancelEventArgs 引数は true に設定されます。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. CancelEventArgs 引数を false に設定することで、MDI 親レポートとすべての MDI 子フォームを強制的に閉じることができます。You can force the MDI parent and all MDI child forms to close by setting the CancelEventArgs argument to false.

関連項目See also