佐々木屋

技術的なことから趣味まで色々書きます

フォームの表示切替(補足)

前回メインフォームの表示切替の話をしましたが、少し説明というかイメージが足りませんでしたので補足します。
sasaki816.hatenablog.com


ここで説明されたメインフォームの入替で、ApplicationContextクラスのMainFormプロパティに設定したフォームがアプリケーション側が管理するフォームになります。
つまり、エントリポイントでApplication.Runメソッドで指定したフォームがForm1として、その後開いたフォームをForm2、Form3、Form4とすると以下のような図になります。

f:id:sasaki816:20190123101624j:plain
Form1がメインフォーム
当然この状態でForm1を閉じるとエントリポイントに処理が戻ってきてアプリケーションが終了します。その他のフォームを閉じても全く影響はありません。


ここで、Form2を開く際にApplicationContextクラスのメインフォームを入れ替えると、以下の図のように変化します。
f:id:sasaki816:20190123101822j:plain
Form2がメインフォーム
よってForm2を閉じるとエントリポイントに処理が戻ってきてアプリケーションが終了することになります。当然Form1を閉じてもアプリケーションが終了することはありません。

もしこれを全てVB6のような従来の方法(HideメソッドとShowDialog(Show)メソッド)で実現しようとすると、全てのフォームクローズイベント等でフォームの表示切替処理や管理処理を入れなければならず、またShowDialogの場合は開いたフォームのインスタンス破棄が必要になる場合があり、とても面倒なことになります。