VB2005です。例えばTextBoxの内容をファイルに保存する操作を忘れたまま,フォームの×ボタンでプログラムを終了しようとするときに,警告を出したい。それで,Form1_FormClosingイベントに下記のようなプロシージャを書いてrunさせてみた。すると,MsgBoxで,「No」を押しても期待しているExit Subで抜けてくれずに,プログラム全体が終了してしまう。この目的を達するにはどうしたらいいか,教えて下さい。
'テキストを編集したのにファイルに書き込まないでプログラムを閉じようとしているときの警告
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
Dim ret As Integer 'MsgBoxからの戻り値
If TextEditMark = 1 Then 'TextEditMarkはPublic integerで,Textを変更したときのプロシージャで1にsetされている
ret = MsgBox("テキストの変更がファイルに上書きされていません" + vbCrLf + "終了しますか", MsgBoxStyle.YesNo, "ファイルへの書き込み未了")
If ret = MsgBoxResult.No Then
Exit Sub
End If
End If
End Sub
> 「No」を押しても期待しているExit Subで抜けてくれずに
いや、抜けてしまったからこそ、フォームが閉じてしまったのではないかと。
「フォームを閉じさせないための処理」を記述しないといけません。
イベント引数 e の Cancel プロパティについて調べてみてください。
> If ret = MsgBoxResult.No Then
> Exit Sub
> End If
ここで If 判定を行っていますが、条件が True であろうと False であろうと、
実際には何も行っていませんよね。(ただ Exit Sub/End Sub に到達するのみで)
MSDNをちゃんと読みましょう。
ref) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.formclosing.aspx
>フォームを閉じる操作をキャンセルするには、イベント ハンドラに渡される FormClosingEventArgs の Cancel プロパティを true に設定します。
魔界の仮面弁士さん,YuOさん御教示ありがとうございました。
If ret = MsgBoxResult.No Then
e.Cancel = True
Exit Sub
End
のように1行挿入で,すべて解決しました。感謝です!