次の方法で共有


方法: MDI 子フォームを作成する

MDI 子フォームは 、Multiple-Document インターフェイス (MDI) アプリケーションの重要な要素です。これらのフォームはユーザー操作の中心です。

次の手順では、Visual Studio を使用して、ほとんどのワープロ アプリケーションと同様に、 RichTextBox コントロールを表示する MDI 子フォームを作成します。 System.Windows.Forms コントロールを他のコントロール (DataGridView コントロールやコントロールの組み合わせなど) に置き換えることで、さまざまな可能性を持つ MDI 子ウィンドウ (および拡張では MDI アプリケーション) を作成できます。

MDI 子フォームを作成する

  1. Visual Studio で新しい Windows フォーム アプリケーション プロジェクトを作成します。 フォームの [プロパティ ] ウィンドウで、 IsMdiContainer プロパティを true に設定し、その WindowsState プロパティを Maximized に設定します。

    これにより、フォームが子ウィンドウの MDI コンテナーとして指定されます。

  2. Toolboxから、MenuStrip コントロールをフォームにドラッグします。 その Text プロパティを File に設定 します

  3. Items プロパティの横にある省略記号 (...) をクリックし、[追加] をクリックして 2 つの子ツール ストリップ メニュー項目を追加します。 これらの項目の Text プロパティを [新規 ] と [ウィンドウ] に設定します。

  4. ソリューション エクスプローラーでプロジェクトを右クリックし、[追加]、[>を選択します。

  5. [新しい項目の追加] ダイアログ ボックスで、[テンプレート] ウィンドウから Windows フォーム (Visual Basic または Visual C# の場合) または Windows フォーム アプリケーション (.NET) (Visual C++) を選択します。 [ 名前 ] ボックスに Form2 という名前を付けます。 [ 開く ] を選択して、フォームをプロジェクトに追加します。

    この手順で作成した MDI 子フォームは、標準の Windows フォームです。 そのため、 Opacity プロパティを使用すると、フォームの透明度を制御できます。 ただし、 Opacity プロパティは最上位のウィンドウ用に設計されています。 描画の問題が発生する可能性があるため、MDI 子フォームでは使用しないでください。

    このフォームは、MDI 子フォームのテンプレートになります。

    Windows フォーム デザイナーが開き、Form2 が表示されます。

  6. ツールボックスから、RichTextBox コントロールをフォームにドラッグします。

  7. [プロパティ] ウィンドウで、Anchor プロパティを Top、Left、Dock プロパティを Fill に設定します。

    これにより、 RichTextBox コントロールは、フォームのサイズが変更された場合でも、MDI 子フォームの領域を完全に塗りつぶします。

  8. [新規] メニュー項目をダブルクリックして、Clickイベント ハンドラーを作成します。

  9. ユーザーが新規メニュー項目をクリックしたときに新しい MDI 子フォームを作成するには、次のようなコードを挿入します。

    次の例では、イベント ハンドラーがClickMenuItem2 イベントを処理します。 アプリケーション アーキテクチャの詳細によっては、[ 新しい ] メニュー項目が 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.h の先頭に次の #include ディレクティブを追加します。

    #include "Form2.h"
    
  10. [プロパティ] ウィンドウの上部にあるドロップダウン リストで、[ファイル] メニュー ストリップに対応するメニュー ストリップを選択し、MdiWindowListItemプロパティを [ウィンドウ] ToolStripMenuItemに設定します。

    これにより、[ ウィンドウ ] メニューで、アクティブな子ウィンドウの横にチェック マークを付けて、開いている MDI 子ウィンドウの一覧を維持できます。

  11. F5 押して、アプリケーションを実行します。 [ファイル] メニューから [新規] を選択すると、しい MDI 子フォームを作成できます。このフォームはウィンドウ メニュー項目で追跡されます。

    MDI 子フォームに MainMenu コンポーネント (通常はメニュー項目のメニュー構造) があり、 MainMenu コンポーネント (通常はメニュー項目のメニュー構造) を持つ MDI 親フォーム内で開かれる場合、 MergeType プロパティ (および必要に応じて、 MergeOrder プロパティ) を設定すると、メニュー項目は自動的にマージされます。 MergeTypeコンポーネントと子フォームのすべてのメニュー項目の両方のMainMenuプロパティをMergeItemsに設定します。 さらに、両方のメニューのメニュー項目が目的の順序で表示されるように、 MergeOrder プロパティを設定します。 さらに、MDI 親フォームを閉じると、MDI 親のClosing イベントが発生する前に、各 MDI 子フォームでClosing イベントが発生します。 MDI 子のClosing イベントを取り消しても、MDI 親のClosing イベントが発生するのを防ぐものではありません。ただし、MDI 親のCancelEventArgs イベントのClosing引数はtrueに設定されます。 CancelEventArgs引数を false に設定することで、MDI 親フォームとすべての MDI 子フォームを強制的に閉じさせることができます。

こちらも参照ください