フォームを子フォーム(サブフォーム) として表示する

フォームを子フォーム(サブフォーム) として表示するコードを紹介します。

プログラム

UI

下図のUIを作成します。

FormMain

フォームを子フォーム(サブフォーム) として表示する:画像1

FormSub

フォームを子フォーム(サブフォーム) として表示する:画像2

コード

下記のコードを記述します。

FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormSubForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      FormSub fs = new FormSub();
      fs.Show(this);
    }
  }
}

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像3

[button1]をクリックします。サブウィンドウが表示されます。(下図)
フォームを子フォーム(サブフォーム) として表示する:画像4

[button1]をクリックするごとにサブフォームが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像5

サブフォームどうしではフォームをクリックするとそのフォームが最前面に表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像6

フォームがサブフォームの場合、オーナーとなる親フォームをクリックしてもサブフォームより前面には表示されません。常にサブフォームが親フォームの前面に表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像7

タスクバーには、メインフォームとサブフォームが表示されます。タスクバーから非表示にする場合はこちらの記事を参照してください。
フォームを子フォーム(サブフォーム) として表示する:画像8

参考:オーナーを設定しない場合の動作

下記のコードでプロジェクトを実行すると、[button1]のクリック時に表示されるフォームにはオーナーが設定されないため、サブフォームではなくなります。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormSubForm
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      FormSub fs = new FormSub();
      fs.Show();
    }
  }
}


プロジェクトを実行すると下図のフォームが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像9

[button1]をクリックすると、新しいフォームが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像10

[button1]をクリックするごとにフォームが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像11

サブフォームをクリックするとそのフォームが最前面に表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像12

メインフォームをクリックしてアクティブにすると、最前面に表示されます。先ほどのサブフォームの場合と動作が異なります。
フォームを子フォーム(サブフォーム) として表示する:画像13

タスクバーには、メインフォームとサブフォームが表示されます。
フォームを子フォーム(サブフォーム) として表示する:画像14

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2016-08-17
Copyright © 1995–2025 iPentec all rights reserverd.