いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

フォームを別のコントロール内に配置する。(Form, Panel, TopLevel, FormBorderStyle)


たまに、別の場所で作成したフォームを別のフォーム内に配置したい場合があります。
そのままフォームをControls.Addしようとしても、例外が発生します。
これは、フォームがTopLevelコントロールであるため、コントロールとして追加出来ない為です。


フォームを別のフォーム内もしくは特定のコントロール内に配置するには
以下のプロパティを調整します。

  • TopLevelプロパティ
  • FormBorderStyleプロパティ


TopLevelプロパティをfalseにすることで、そのフォームはTopLevelコントロール
じゃなくなります。その上で、FormBorderStyleをNoneにすると外枠が消えます。


この状態で貼り付けるといい感じになります。


以下、その部分のサンプルです。
あらかじめ、Form1とForm2が存在しているとします。

[Form1のロード部分]

Form2 form2 = new Form2();

// TopLevelコントロールでないようにする。
form2.TopLevel        = false;
// 外枠を消す.
form2.FormBorderStyle = FormBorderStyle.None;
// 配置されているコントロールを表示する.
form2.Visible         = true;

pnlMain.Controls.Add(form2);