2009年8月17日月曜日

[.NET] Windowsフォームでのダイアログの作成と終了処理について

Windowsフォームでダイアログを作成するには、普通にFormを作成してFormBorderStyleやMaximizeBoxやMinimizeBoxのプロパティを変更して、ダイアログの概観を持つフォームを作成します。またモーダルダイアログとして表示するには、ShowDialog();を呼び出します。

OKやキャンセルなどのいわゆるダイアログボタンは、普通にボタンを配置してDialogResultプロパティを設定し、それに合うような文字列をTextプロパティに設定します。DialogResultが設定されたボタンを押すと自動的にFormを閉じようとするので、Clickイベントハンドラでは、Close()を呼び出す記述してはいけません。

DialogResultが設定されたボタンとウィンドウクローズボタン(右上の×ボタン)を含めて、これらのボタンを押されたときに終了させないようにするには、FormClosingイベントハンドラを登録して、FormClosingEventArgsのCloseにfalseを設定します。この処理は、ShowDialog();で表示するFormに限らず、一般的なFormについても同様です。

プログラムからShowDialog();で表示したFormを閉じるには、Visibleプロパティをfalseにします。そうすると、ダイアログが非表示になり、ShowDialog();が復帰します。このときの戻り値は、FormのDialogResultプロパティに設定されているものになります。そのため、Visibleを設定するときにDialogResultを設定しておいたほうがよいでしょう。