• ベストアンサー

[VB2008]フォームを閉じる前に確認する

フォームを×ボタンやAlt+F4などで閉じる前に ダイアログで閉じるかどうかを確認するにはどうすればいいでしょうか。 以下のコードを作ったのですが「いいえ」を選択しても強制的に終了してしまいます。  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing   If (MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) = Windows.Forms.DialogResult.Yes Then    End   End If  End Sub ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kazma_hk
  • ベストアンサー率26% (115/428)
回答No.1

if文の判定後elseを用意してそのなかでe.Cancel をしてください。 これで発生しているイベントがキャンセルされてフォームがクローズされなくなります。

その他の回答 (2)

回答No.3

すでに回答が出されているとおり、e.Cancel=Trueとすればフォームのクローズ処理をキャンセルできます。 少し脱線しますが2つ気になった点があるので。 まず、アプリケーションの終了で「End」を使うのは推奨されていません。メインとなるフォームを閉じれば(この場合、e.Cancel=Falseのままにしておけば)終了します。 もうひとつは、e.CloseReasonによる分岐をしなくてもよいのか、という点です。現状だと、Windowsをシャットダウンする時にアプリケーションが起動中だと、メッセージボックスが表示されてシャットダウンが中断されます。意図的にそのような仕様にしているのであれば構いませんが「フォームを×ボタンやAlt+F4などで閉じる前」と限定されていたので。。。

yue_1995
質問者

補足

自分は自動更新などに気付かずにドキュメントを保存する前に 再起動が始まる、苦い経験をしたことがあるので Windows終了時にも出るようにしたいと思います。 ちなみに、e.CloseReasonにはどういう値が入り、それは何を意味するのでしょうか? それとEndが推奨されない理由もよければ教えてください。 よろしくお願いします。

  • talosoft
  • ベストアンサー率26% (6/23)
回答No.2

FomeClosing イベントの中で if msgbox("EXIT?",vbYesNo+vbDefaultButton1,"Question")=vbno then e.cancel=true end if

関連するQ&A