C#メモ SplitContainerのPanel1かPanel2にFormを表示してみる

C#

はじめに

とあるアプリを作ろうと思って困ったので、メモ。
ポイントはこんなんかなぁ…。

  • SplitContainerに表示するFormをインスタンス化する
  • インスタンス化したFormのTopLevelってプロパティをfalseに変更する
  • SplitContainerのPanelのControlsコレクションでAddメソッドを使ってFormを追加する
    ※今回はフォームがロードされたときのコールバックで表示することにする
  • FormのShowメソッドで表示する

準備と実装

フォームを作成する

まずはメインにするフォーム(名前はMainFormにしとく)はこんな感じ。
フォームにSplitContainer(名前はMainSplitContainerにしとく)を追加する。
実行したときに区別がつくようにSplitContainerのPanel1とPanel2の背景色は変えといた。

24913_05

んで、SplitContainerに配置するフォーム(名前はSubFormにしとく)はこんな感じ。
これも区別がつくようにLabelを追加しといた。

24913_01

SplitContainerのプロパティのうち、FromBorderStyleってプロパティをNoneに変更する

24913_03

コードを書く

んで、コード。
今回はMainFormでフォームがロードされたとき(Loadイベント)にSubFormを表示することにする。
あと、SubFormはPanel2に表示することに。
Loadイベントのコードはこんな感じ。

private void MainForm_Load(object objSender, EventArgs objEventArguments)
{
    try
    {
        // SplitContainerのPanelに表示するフォームをインスタンス化する
        SubForm objSubForm = new SubForm();
        // フォームのTopLevelってプロパティをfalseにする
        objSubForm.TopLevel = false;
        // フォームをSplitContainerに追加する
        MainSplitContainer.Panel2.Controls.Add(objSubForm);
        // フォームを表示する
        objSubForm.Show();
    }
    catch (Exception exception)
    {
        // 例外が起きたときはコンソールに例外のメッセージを表示する
        System.Console.WriteLine(exception.Message);
    }
    finally
    {
        // 今回は何もしない
        ;
    }
}

実行

実行すると、こんな感じ。

24913_06

おわりに

あとは見た目をうまいことすれば使えるようになるかな…。
んま、メモってことで。