通常はフォームの中にフォームを表示するのは 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と同じ形式で表示されるようです。
コメント