トップ > Tech > CSharp > コントロール > フォームを違うフォーム内に表示する

フォームを違うフォーム内に表示する

概要

フォーム(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);
}
(2010/03/25 17:26:27)
プロフィール

Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。 好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。 詳しくは Web mixi で。

Bookmark and Share