フォーム(System.Windows.Forms.Form クラスを継承したクラス)を別のフォーム(もしくは Panel などのコンテナコントロール)の中に表示させる方法。
分割して作成していた GUI を一つにまとめることができる。
通常、GUI を分割デザインしたいなら、 UserControl を継承したほうがいいと思うが、別々に作っていたアプリケーションを融合させる場合などには使える(かもしれない)テクニックである。
基本的には内部に配置されるフォーム(以下、内部フォーム)の TopLevelControl プロパティと FormBorderStyle プロパティ、必要に応じて Dock プロパティを設定する。
内部フォームを動的にインスタンス化し、 配置する先のフォームや Panel など(以下、コンテナコントロール)の Controls コレクションに追加してやればよい。
下記のコードは ContainerForm というフォームの内側全体に InnerForm というフォームを表示するものである。
// コンテナコントロールの Load イベントハンドラ
private void ContainerForm_Load(object sender, EventArgs e)
{
// インスタンス化
InnerForm form = new InnerForm();
// TopLevelControl を false に
form.TopLevelControl = false;
// 境界線なしにしないとタイトルバーなどが描画されてしまう
form.FormBorderStyle = FormBorderStyle.None;
// コンテナコントロールにサイズをフィットさせる
form.Dock = DockStyle.Fill;
// 見えるようにしましょう
form.Visible = true;
// コンテナコントロールの Controls コレクションに form を追加
ContainerForm.Controls.Add(form);
}
Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。
好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。
詳しくは Web mixi で。