2.7.8 フォームの終了をユーザーに確認する

ユーザーにフォームを終了するかどうかを確認するオプションが必要な場合は、CloseFormQueryメソッドとCloseQueryイベントを使用します。

例には、メイン・フォームとフォームが閉じられるときに表示されるダイアログがあります。メイン・フォームには、OKとキャンセルの2つのボタンがあります。

キャンセルボタンは、CloseFormQueryメソッドを使用してフォームを閉じます。

Invoke #Com_Owner.CloseFormQuery 
 

ボタンのほかに、フォームにはダイアログ・フォームがあります。

ダイアログ・フォームには、3つのボタンがあります。

 

3つのボタンすべてにフォームを閉じるClickイベント・ルーチンがあります。

EVTROUTINE HANDLING(#BTN_CLOSE.Click)

   Invoke #Com_Owner.CloseForm 
ENDROUTINE  

EVTROUTINE HANDLING(#BTN_CANCEL.Click)
   Invoke #Com_Owner.CloseForm
ENDROUTINE  

EVTROUTINE HANDLING(#BTN_MIN.Click)
   Invoke #Com_Owner.CloseForm
ENDROUTINE
 

その他に、それぞれのModalResult値があり、以下のように値が設定されます。

     

#BTN_CLOSE

Cancel

 

#BTN_CANCEL

No

 

#BTN_MIN

OK

 

キャンセルボタンのイベント・ルーチンのほかに、メイン・フォームにはCloseQueryイベントのイベント・ルーチンがあります。このイベントでは、ダイアログ・フォームを起動し、ダイアログ・フォームを閉じるときにModalResultを受け取ります。それから返されたModalResultの値を調べ、それにしたがってアクションを実行します。

フォームの終了を続行するかどうかは、Continueパラメータで使用される#Optionフィールドの値で決定します。

EvtRoutine Handling(#Com_Owner.CloseQuery) Continue(#Option)

   Invoke #Dialog.ShowModalForm

   Define #QResult Reffld(#Std_Texts)
   Change #QResult #Dialog.modalResult 

   Case #QResult
   When '= No'
      Invoke #Com_Owner.RestoreForm
      Set #Option Value(FALSE)
   When '= OK'
      Invoke #Com_Owner.MinimizeForm
      Set #Option Value(FALSE)
   OtherWise  
      Set #Option Value(TRUE)
   EndCase  
EndRoutine  

 

caseステートメントでは、ダイアログ・フォームから返されるModalResult値がNo(キャンセルボタンに割り当てられる)の場合にメイン・フォームを元の大きさに戻し、返された値がOK(最小化ボタンに割り当てられる)の場合は、メイン・フォームを最小化します。どちらの場合も、ContinueパラメータはFalseに設定されます。これ以外のModalResult値が返された場合は、フォームは閉じられます。