DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

新しいフォームを表示する

ここでは、メインのフォームから別のフォーム(例えば、設定ダイアログなど)を表示させる方法を紹介します。

まず表示したいフォームがまだプロジェクトに追加されていなければ、メニューの「プロジェクト」-「Windowsフォームの追加」などにより、フォームをプロジェクトに追加します。なおここでは"Form2"を追加したとします。

フォームの表示方法には、「モーダル」と「モードレス」の2種類があります。

モーダルフォームとして表示したときは、そのフォームが閉じられない限り、他のフォームの操作ができなくなります。多くのアプリケーションでは、設定を変更するダイアログを表示するとメインのウィンドウズは操作できなくなります(例えば、Visual Studioのメニューの「ツール」-「オプション」で、オプションダイアログを表示して確認してみてください)。これは、設定ダイアログがモーダルで表示されているからです。

一方、モードレスフォームとして表示したときは、そのフォームを閉じなくても他のフォームの操作ができます。例えばペイントソフトでは、キャンバスとなるメインのウィンドウの他に、筆や消しゴムなどのツールを選ぶウィンドウや、色を選ぶパレットとなるウィンドウが別のウィンドウとして表示されていることがあります。これらのウィンドウは、モードレスとして表示します。

新しいフォームを表示するとき、通常はモーダルフォームとして表示します。モードレスフォームとすべきなのは、ウィンドウが2枚以上あるアプリケーションを作成するときや、検索機能のように、メインフォームも操作できるようにしておく必要がある場合などに限られます。

補足:Visual Studioの検索ダイアログもそうですが、検索ダイアログはモードレスフォームでありながら、メインウィンドウの下に隠れることがありません。このように、モードレスフォームを別のフォームの背後に隠れないようにする方法は、「モードレスのフォームが、あるフォームの背後に隠れないようにする」で説明しています。

次の例はForm2をモーダルフォームとして表示したときの例です。

VB.NET
コードを隠すコードを選択
'Form2クラスのインスタンスを作成する
Dim f As New Form2()
'Form2を表示する
'ここではモーダルダイアログボックスとして表示する
'オーナーウィンドウにMeを指定する
f.ShowDialog(Me)
'フォームが必要なくなったところで、Disposeを呼び出す
f.Dispose()
C#
コードを隠すコードを選択
//Form2クラスのインスタンスを作成する
Form2 f = new Form2();
//Form2を表示する
//ここではモーダルダイアログボックスとして表示する
//オーナーウィンドウにthisを指定する
f.ShowDialog(this);
//フォームが必要なくなったところで、Disposeを呼び出す
f.Dispose();

次の例はForm2をモードレスフォームとして表示したときの例です。

VB.NET
コードを隠すコードを選択
'Form2クラスのインスタンスを作成する
Dim f As New Form2()
'Form2を表示する
'ここではモードレスフォームとして表示する
f.Show()
C#
コードを隠すコードを選択
//Form2クラスのインスタンスを作成する
Form2 f = new Form2();
//Form2を表示する
//ここではモードレスフォームとして表示する
f.Show();

ShowDialogメソッドによりモーダルフォームとして表示した場合は、そのフォームが不要になった時にDisposeメソッドを呼び出し、リソースを解放しなければならない点に注意してください。しかし、Showメソッドによりモードレスフォームとして表示した場合には、その必要がありません。

ShowDialogメソッドによりフォームがモーダルで表示された場合は、そのフォームが閉じられるまでShowDialogメソッド以降のコードが実行されません。しかし、Showメソッドによりフォームがモードレスで表示された場合は、フォームが表示されるとすぐにShowメソッド以降のコードが実行されます。

モードレスフォームを表示したときは、通常メインフォームを閉じるとアプリケーションが終了します。なお、メインフォームを閉じてもアプリケーションを終了させないようにするには、メインフォームを閉じずにHideメソッドで隠すか、「フォームを連続して表示する」で説明している方法をご使用ください。

補足:モーダルフォームを表示したときは、「OK」と「キャンセル」ボタンの付いたダイアログを表示させるケースが多いでしょう。このようなダイアログを表示方法は「フォームにOKボタン、キャンセルボタンを付ける」で説明します。
補足:上のコードでは、Form2を表示させるフォームと、Form2とが同じ名前空間にあることが前提となっています。別の名前空間にあるときは、Form2を名前空間も指定して表記する必要があります。
  • 履歴:
  • 2008/9/16 説明を多少書き直す。
  • 2011/1/15 モーダルフォームとモードレスフォームの説明などを書き直す。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。