§1 人に使ってもらうソフトウェア VB6
 (8) 終了時の確認 前へ 目次へ 次へ 

 「電圧の計算(オームの法則)」のプログラムでは、フォームに配置した「終了ボタン」をクリックすると、すぐに終了してしまう。
 終了を選択したときにいきなり終了してしまうのではなく、終了するかどうかの確認ができたり、作成したデータが保存されていない旨の警告を出したりしたいことがある。このような処理は、終了のボタンやメニューの処理としてプログラミングする。

 ここでは 「電圧の計算(オームの法則)」のプログラムに終了確認の処理を追加する。
 簡単な確認には、メッセージボックスMsgBox関数を使う。ダイアログにメッセージを表示して、ボタンがクリックされるのを待つ。

MsgBox関数の書式
   書式 MsgBox(prompt[, buttons] [, title] [, helpfile, context])   詳細は、ヘルプを参照のこと。

 終了ボタン(Command2)をクリックすると実行されるCommand2_Clickプロシージャにコードを追加する。

・プログラムリスト(追加)

Private Sub Command2_Click()
    Dim yn As VbMsgBoxResult

    yn = MsgBox("終了しますか。", vbYesNo, "終了確認")
    If yn = vbNo Then
        Text1.SetFocus
        Exit Sub
    End If
    Unload Me
    End
End Sub

 変数ynをVbMsgBoxResult型で宣言しているが、Integer型でも良い。
 Exit Subは、このプロシージャ(Command2_Click)から強制的に抜け出す命令である。

 MsgBox関数の実行例
図1-8-1


改良点

 終了ボタン(Command2)ではなく、コントロールボックスの「閉じる」ボタンをクリックすると確認のダイアログが表示されずに終了してしまう。
 アプリケーションが終了(UnLoad)する直前にはQueryUnloadイベントが発生するので、終了確認及び終了のプログラムをForm_QueryUnloadプロシージャに記述する。

・プログラムリスト(変更・追加)

Private Sub Command2_Click()    '終了ボタンをクリックしたときに実行される。
    Unload Me        'QueryUnloadイベントが発生する。
End Sub

'アプリケーションが終了する直前に実行される。
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim yn As VbMsgBoxResult

    yn = MsgBox("終了しますか。", vbYesNo, "終了確認")
    If yn = vbNo Then
        Text1.SetFocus
        Cancel = True                'Trueでフォームはアンロードされない。終了しない。
        Exit Sub
    End If
    End
End Sub

 アプリケーションが終了する直前に、QueryUnload イベント プロシージャまたは Unload イベント プロシージャ内でCancelプロパティを真 (True) に設定すると、アプリケーションを閉じる処理を中止することができる
 QueryUnload イベントはすべてのフォームに対して、それらのフォームのアンロード処理が始まる前に発生する。一方、Unload イベントは各フォームがアンロードされるたびに発生する。


 (8) 終了時の確認 前へ 目次へ 次へ 
Copyright © 2001,2002 Hiroshi Masuda 

 

 

inserted by FC2 system