この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

head2.gif 7.3.3 各イベントの処理
 以上で,MDI親ウィンドウの画面設計は終わりとし,MDI親ウィンドウに関するイベントの処理部分を実装してゆくことにする。

●終了メニューの処理
 まずは,ユーザーがこのアプリケーションの[ファイル]−[終了]メニューを選択したときの処理から実装してゆこう。ユーザーが[ファイル]−[終了]メニューを実行したときには,このアプリケーションを終了させるような処理にしなければならない。

 アプリケーションを終了するためには,Unloadキーワードを使い,自分自身を示すMeをアンロードすればよい。そのようなプログラムは,List 7-1のようになる。

●終了されようとしているときの処理
 アプリケーションがユーザーによって終了されようとしているとき,本当に終了してもよいのかを尋ねるようにするほうがよいケースもある。つまり,アプリケーションが終了されようとするときに,Fig.7-13のようなウィンドウを表示し,ユーザーが[はい]ボタンを押さなければ,アプリケーションを終了しないようにするのである。

Fig.7-13 終了の確認
fig7_13

 このようなしくみを備えておけば,ユーザーが誤ってアプリケーションを終了してしまうという操作を防ぐことができるようになる。


One Point! とはいえ,アプリケーションを終了しようとするたびにFig.7-13のようなメッセージを何度もユーザーが見ると,うっとうしく見えてくるのもまた事実である。よって,このような機能を実装するかどうかは,ユーザーインタフェース的な問題であり,必ずしもこのような機能を実装するのが好ましいとは一概にはいえない。

 フォームが閉じられようとするときには,フォームのQueryUnloadイベントが発生する。

Private Sub MDIForm_QueryUnload(Cancel As Integer, _
                                UnloadMode As Integer)

 ここで,Cancel引数に0以外の値を設定すれば,フォームは閉じられない。よって,List 7-2のようなQueryUnloadに対応するイベント処理を実装すれば,Fig.7-13に示したウィンドウを表示し,[はい]ボタンを押さなければフォームが閉じられないというしくみを持たせることができる。

●終了時の処理
 Visual Basicの場合,すべてのフォームがアンロードされたときに,アプリケーションが終了するということになる。一般に,MDIアプリケーションの場合には,MDIの親となるフォームがアンロードされたときにアプリケーションを終了するような実装にする。つまり,別のフォームがまだ存在するときであっても,MDIの親となるフォームがアンロードされたならば,それらのフォームもアンロードし,アプリケーションを終了させてしまうのである。

 フォームがアンロードされる直前には,Unloadイベントが発生する。そこで,MDIの親フォームのUnloadイベントにList 7-3に示すUnloadイベントの処理を実装する。

 List 7-3の処理は,Formsコレクションに含まれるすべてのフォームをUnloadキーワードを使ってアンロードするというものである。こうすることで,MDIの親フォームがアンロードされたならば,すべてのフォームがアンロードされ(といっても,いまのところはまだMDIの親フォーム以外のフォームは作っていないので,次節以降に追加してゆくフォームという意味だ),アプリケーションが終了する,ということになる。

prevpg.gif Chapter 7 6/65 nextpg.gif