ここから本文です

VB2010 閉じるボタン確認

ov3********さん

2011/9/2600:58:47

VB2010 閉じるボタン確認

VB2010を使ってプログラムを組んでいるのですが、
フォームの右上の閉じるボタンを使用してフォームを閉じるときに
そのまま閉じるのではなく、一度メッセージボックスで確認を取ってからフォームを閉じる。
ということをしたいのです。

VB6ならFormのQueryUnloadイベント
VB.NETならFormのClosingイベント

を使うということはわかったのですが、
VB2010のFormイベント欄を探してもこのイベントが見つからず…
VB2010では閉じるボタンでのイベントは行えないのでしょうか?

補足『FormClosing』『FormClosed』イベントを先ほど見つけて、使用して組んでみたのですが
フォーム内に作った終了ボタンと同じコードを書くとエラーが起こってしまいました。
(メッセージボックス:「終了しますか?」→はい選択→終了せずにもう一度メッセージボックスがでてくる)

このエラーは使用したイベントが違うので起こっているのですかね?
それともコードの書き方が違うからですかね…?

閲覧数:
14,101
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

yns********さん

編集あり2011/9/2608:16:16

こんにちわ ^o^

>フォームの右上の閉じるボタンを使用してフォームを閉じるときに
>そのまま閉じるのではなく、一度メッセージボックスで確認を取ってからフォームを閉じる。

下記構成でよいと思います.
動作:
1.フォームの閉じる(×)ボタンを押すと,下記1.のClosingのイベントプロシージャ
__を実行しにいく.
2.終了ボタンをつくっている場合,終了ボタンクリックの
__下記 2.のMe.Close() から 下記1.のClosingのイベントプロシージャを実行しにく.



1.Form1 の クラス内に以下イベントプロシージャを置く

'■■Closingのイベントプロシージャ
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

Dim Answer As MsgBoxResult

Answer = MsgBox("終了しますか?", MsgBoxStyle.YesNo, "確認")

If Answer = MsgBoxResult.No Then
e.Cancel = True
End If

End Sub


2.終了ボタンがある場合は,
__Button Clickイベントプロシージャ内に

下記構文を入れる
Me.Close()

ですね

質問した人からのコメント

2011/9/27 02:07:43

お二人とも解答ありがとうございました。
実際のコードは終了するにあたりもう少し条件が付加してましたので、
(そのため文章説明だったのですが、逆に配慮不足になってしまったようですみません…)
yns008551さんが書いてくれたコードを応用し無事にプログラムを組むことができました。
Closingイベントの中にMe.close()は書かなくてもよかったのですね。

丁寧な解答ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

hag********さん

編集あり2011/9/2602:31:57

多分コードの書き方が違うんだと思いますが、実際質問者さんがコードを載せていないので、検証しようがありません。
しかも、質問文から状況を推察するに、「エラー」ではなく「バグ」です。
エラーとは、命令が実行できない状況を指します。プログラムであれば、プログラムの実行が強制的に停止してしまう状態を指します。

補足にある動作を実現したいのであれば、以下のコードで問題ないと思います。

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If e.CloseReason = CloseReason.UserClosing AndAlso MessageBox.Show("終了しますか?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then e.Cancel = True
End Sub

今後質問する場合は、実際に組んだコードも載せて下さい。
その方が回答する側も、絞って考えれます。

再びメッセージボックスが表示される理由を考えてみましたが、
Me.Close()を、FormClosingイベント内で使用しているからだと思います。(推測ですが)
その場合、再度FormClosingイベントが発生し、Me.Close()が実行され、再度FormClosingイベントが...となります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる