FormClosingイベントでFormを閉じさせない方法は?

解決


町や空に  2008-11-20 17:02:22  No: 140871  IP: 192.*.*.*

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

編集 削除
魔界の仮面弁士  2008-11-20 17:35:00  No: 140872  IP: 192.*.*.*

> 「No」を押しても期待しているExit Subで抜けてくれずに

いや、抜けてしまったからこそ、フォームが閉じてしまったのではないかと。
「フォームを閉じさせないための処理」を記述しないといけません。

イベント引数 e の Cancel プロパティについて調べてみてください。


>  If ret = MsgBoxResult.No Then
>    Exit Sub
>  End If

ここで If 判定を行っていますが、条件が True であろうと False であろうと、
実際には何も行っていませんよね。(ただ Exit Sub/End Sub に到達するのみで)

編集 削除
YuO  2008-11-20 17:36:54  No: 140873  IP: 192.*.*.*

MSDNをちゃんと読みましょう。

ref) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.formclosing.aspx
>フォームを閉じる操作をキャンセルするには、イベント ハンドラに渡される FormClosingEventArgs の Cancel プロパティを true に設定します。

編集 削除
町や空に  2008-11-20 19:26:57  No: 140874  IP: 192.*.*.*

魔界の仮面弁士さん,YuOさん御教示ありがとうございました。

  If ret = MsgBoxResult.No Then
    e.Cancel = True
    Exit Sub
  End 

のように1行挿入で,すべて解決しました。感謝です!

編集 削除