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

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

プログラム

UI

下図のUIを作成します。
FormMain

FormSub

コード

下記のコードを記述します。
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);
    }
  }
}

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。サブウィンドウが表示されます。(下図)


[button1]をクリックするごとにサブフォームが表示されます。


サブフォームどうしではフォームをクリックするとそのフォームが最前面に表示されます。


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


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

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

下記のコードでプロジェクトを実行すると、[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();
    }
  }
}

プロジェクトを実行すると下図のフォームが表示されます。


[button1]をクリックすると、新しいフォームが表示されます。


[button1]をクリックするごとにフォームが表示されます。


サブフォームをクリックするとそのフォームが最前面に表示されます。


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


タスクバーには、メインフォームとサブフォームが表示されます。

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