【C#/WinForms】フォームの中にフォームを表示する方法

C#
この記事は約3分で読めます。

通常はフォームの中にフォームを表示するのは MDI になるのですが、そうではなく、フォームの中にコントロールのようにフォームを表示する方法です。フォームのため、移動やサイズ変更もできます。また、フォーム上のコントロールの中に表示することもできます。

サンプルソース

サンプルは、フォームの中にフォームを表示するのと、フォームに配置したパネルの中に表示しています。

FormInForm.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Test {
    /// <summary>
    /// フォームの中にフォームを表示するサンプル
    /// </summary>
    public partial class FormInForm : Form {

        public ForminForm() {
            InitializeComponent();
        }

        private void ForminForm_Load(object sender, EventArgs e) {

            // フォーム内に表示する場合
            Form f1 = new Form();
            // トップレベルウィンドウを false にする。
            // これをしないとパネルに追加する際、エラーになる
            f1.TopLevel = false;
            // サイズ設定
            f1.Size = new Size(311, 319);
            // 表示位置の設定
            f1.Location = new Point(12, 15);
            // フォームに追加する
            this.Controls.Add(f1);
            // フォームを表示する
            f1.Show();
            // 最前面に移動する
            f1.BringToFront();

            // パネル内に表示する場合
            Form f2 = new Form();
            // トップレベルウィンドウを false にする。
            // これをしないとパネルに追加する際、エラーになる
            f2.TopLevel = false;
            // サイズ設定
            f2.Size = new Size(this.panel1.Width - 10, this.panel1.Height - 10);
            // 表示位置の設定
            f2.Location = new Point(5, 5);
            // パネルに追加する
            this.panel1.Controls.Add(f2);
            // フォームを表示する
            f2.Show();
        }
    }
}

解説

Load イベント

フォーム内に表示するフォームは TopLevel を false にする必要があります。 true の場合、エラーになります。サンプルでは f1 フォームはフォーム内に表示し f2フォームはパネルの上に表示しています。

実行結果

左のフォームがフォーム内に表示したフォームで、右がパネル内に表示したフォームです。

おわりに

フォーム内に表示した場合、MDI形式でフォームを表示した場合と同様に、タイトルバーの見た目は Windows 10 でも Windows 7と同じ形式で表示されるようです。

コメント

タイトルとURLをコピーしました