佐々木屋

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

フォームの表示方法

フォーム表示方法は2種類あり、モーダル(他フォームが操作不能)かモードレス(他フォームも操作可能)での表示となります。
2つの違いを簡単に言えば、インスタンスの破棄の必要有無と、その後の処理がどうなるのかということです。

モーダル(他フォームが操作不能

モーダルで表示する場合はShowDialogメソッドを使用します。

Form2 f = new Form2();
f.ShowDialog();
f.Dispose();
Dim f As New Form2()
f.ShowDialog()
f.Dispose()

この場合、ShowDialogメソッドが実行されるとForm2が表示されますが、その後の処理はForm2が閉じられた後に実行されます。また、インスタンスの破棄が必要ですので、ShowDialogメソッドの後にDisposeメソッドを呼び出します。

当然フォームはIDisposableを実装していますのでusingが使えます。この場合Disposeメソッドは呼び出し不要となります。

using (Form2 f = new Form2()) {
    f.ShowDialog();
}
Using f As New Form2()
    f.ShowDialog()
End Using



モードレス(他フォームも操作可能)

モードレスで表示する場合はShowメソッドを使用します。

//C#
Form2 f = new Form2();
f.Show();
Dim f As New Form2()
f.Show()

モードレスの場合はForm2が開いてもForm1は操作可能ですし、Form1の処理も途中で止まることなく最後まで進みます。よって、インスタンスの破棄は不要となります。というか破棄してはいけません。
ShowメソッドもIDisposableを実装していますが、呼び出し元の処理が最後まで実行されてしまうので、usingを使うとインスタンスが破棄されてForm2は表示されません(正しくは一瞬表示してすぐに閉じる)ので、使用してはいけません。


フォームの切り替えについてはまた別の機会に書きます。