C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: WinFormのFormClosingイベントについて


(過去ログ 121 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■72252 / inTopicNo.1)  WinFormのFormClosingイベントについて
  
□投稿者/ タイタン (4回)-(2014/05/28(Wed) 19:45:46)

分類:[.NET 全般] 

作成した簡単なWin Formアプリケーションがあります。
Formをフォームの右上のバッテンで閉じようとするとFormClosingイベントが走り、メッセージボックスのNoを押下するとアプリケーションが閉じます。

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
//メッセージ表示。
var result = MessageBox.Show("終了しますか?,"send",MessageBoxButtons.YesNo);

if (result == DialogResult.No)
{
MessageBox.Show("処理を中止しました。");
return;
}

しかし、アプリケーションを起動したままWindows7をシャットダウンしようとすると、同様にFormClosingイベントが走ります。
これ自体は問題ないです。メッセージボックスのNoを押下するとアプリケーションが閉じます。

しかしながら、ウィンドウズがシャットダウンされなく、再度スタートからシャットダウンをおこなおうとします。
そうすると、既に落ちているはずのアプリケーションのFormClosingイベントのメッセージが表示されます。

そして、なかなかシャットダウンする事ができないのですが、原因が全くわかりません。
何かおわかりになれば、お教え頂けませんでしょうか?よろしくお願いいたします。

環境はWin7の.NET4.0です。
引用返信 編集キー/
■72253 / inTopicNo.2)  Re[1]: WinFormのFormClosingイベントについて
□投稿者/ みい (5回)-(2014/05/28(Wed) 21:12:25)
> private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
> {
> //メッセージ表示。
> var result = MessageBox.Show("終了しますか?,"send",MessageBoxButtons.YesNo);
>
> if (result == DialogResult.No)
> {
> MessageBox.Show("処理を中止しました。");
> return;
> }
ん?中止処理のところにe->Cancel=true;は書いてないのですか?
書いてないと中止されないはずですが。
引用返信 編集キー/
■72254 / inTopicNo.3)  Re[2]: WinFormのFormClosingイベントについて
□投稿者/ Azulean (314回)-(2014/05/28(Wed) 22:16:53)
細かいことですが、念のため。

No72253 (みい さん) に返信
> ん?中止処理のところにe->Cancel=true;は書いてないのですか?
> 書いてないと中止されないはずですが。

e.Cancel = true; ですね。

(C++/CLI なら MessageBox::Show など、:: になるため)
引用返信 編集キー/
■72256 / inTopicNo.4)  Re[1]: WinFormのFormClosingイベントについて
□投稿者/ shu (574回)-(2014/05/29(Thu) 08:38:58)
No72252 (タイタン さん) に返信

なにか別のスレッドで処理が動いているとかではないですか?
動いている場合、それも終了させないとアプリケーションの終了とは
ならないと思います。
引用返信 編集キー/
■72257 / inTopicNo.5)  Re[1]: WinFormのFormClosingイベントについて
□投稿者/ ヴァン (1回)-(2014/05/29(Thu) 09:27:30)
こんにちは。

フォームが閉じられる原因を調べ、それによってはメッセージを表示しないようにすべきだと思います。

http://dobon.net/vb/dotnet/form/unloadmode.html

No72252 (タイタン さん) に返信
> しかしながら、ウィンドウズがシャットダウンされなく、再度スタートからシャットダウンをおこなおうとします。
> そうすると、既に落ちているはずのアプリケーションのFormClosingイベントのメッセージが表示されます。

引用返信 編集キー/
■72266 / inTopicNo.6)  Re[3]: WinFormのFormClosingイベントについて
□投稿者/ みい (6回)-(2014/05/29(Thu) 12:54:51)
No72254 (Azulean さん) に返信
> 細かいことですが、念のため。
>
> ■No72253 (みい さん) に返信
>>ん?中止処理のところにe->Cancel=true;は書いてないのですか?
>>書いてないと中止されないはずですが。
>
> e.Cancel = true; ですね。
>
> (C++/CLI なら MessageBox::Show など、:: になるため)
C++/CLIの場合FormClosingだったら引数は
(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e)
となるので、e->Cancel=true;ですよ。
※質問者のタイプミスと判断しました
引用返信 編集キー/
■72267 / inTopicNo.7)  Re[4]: WinFormのFormClosingイベントについて
□投稿者/ 魔界の仮面弁士 (30回)-(2014/05/29(Thu) 15:37:25)
No72266 (みい さん) に返信
> ■No72254 (Azulean さん) に返信
>>e.Cancel = true; ですね。
> ※質問者のタイプミスと判断しました

C++/CLI コードの誤記という可能性は低いように思えます。
C# と読み取るのが妥当かと。


メッセージボックスの呼び出し:
 // C++/CLI
 auto result = MessageBox::Show(…);

 // JScript
 var result = MessageBox.Show(…);

 // C#
 var result = MessageBox.Show(…);



イベントハンドラ:
 // C++/CLI
 void frmMain_FormClosing(Object^ sender, FormClosingEventArgs^ e)

 // JScript
 function frmMain_FormClosing(sender, e : FormClosingEventArgs)

 // C#
 void frmMain_FormClosing(object sender, FormClosingEventArgs e)
引用返信 編集キー/
■72270 / inTopicNo.8)  Re[5]: WinFormのFormClosingイベントについて
□投稿者/ みい (7回)-(2014/05/29(Thu) 17:11:47)
No72267 (魔界の仮面弁士 さん) に返信
> ■No72266 (みい さん) に返信
>>■No72254 (Azulean さん) に返信
> >>e.Cancel = true; ですね。
>>※質問者のタイプミスと判断しました
>
> C++/CLI コードの誤記という可能性は低いように思えます。
> C# と読み取るのが妥当かと。
あ、そうですね。失礼しました。

質問者様へ
Windowsのシャットダウンの場合、他のFormClosingの応答を待って
FormClosedにきたりします。
FormClosedまで処理が進んでいるか、さらにAP終了まで進んでいるか
確認した方がいいかもしれません。
引用返信 編集キー/
■72271 / inTopicNo.9)  Re[2]: WinFormのFormClosingイベントについて
□投稿者/ 774RR (156回)-(2014/05/29(Thu) 17:45:46)
こんなの実験のための実験コードだと思うのだが、もし仮に実用に供するつもりなら考え直してほしい。
ユーザーインターフェイスとして最低だと思う。
実験コードなら下記は無視してくれ。

シャットダウンの話はおいておく。普通に「閉じる」場合を想定する。

ユーザーはそのプログラムを終了させるために「閉じる」のであるから、
閉じられるプログラムに求められる動作は「さっさと終了」だろう。
ドキュメントに修正が無い場合はメッセージボックスなしで即終了すべきで、
未保存の修正済みドキュメントがある場合に限り、
「保存して終了・破棄して終了・終了せず処理継続」だと思う。
Yes/No の二択メッセージボックスは筋が悪い。

そしてもっとダメなのは二回目のメッセージボックス。
たかだか終了操作において、ユーザに二度も余計な操作させるつもりなのか?ありえない。
しかも表示されるメッセージが日本語として意味を成していない。
・終了処理を中止し通常操作に戻る、のか
・通常処理を中止し終了する、のか
・それ以外の何か、なのか
意味がつかめない(特に提示コードに e.Cancel=true; が無いので余計に判断しがたい)

プログラムの挙動を見ることが目的なら System.Diagnostics.Debug を推奨する。
http://msdn.microsoft.com/ja-jp/library/system.diagnostics.debug%28v=vs.110%29.aspx

引用返信 編集キー/
■72378 / inTopicNo.10)  Re[3]: WinFormのFormClosingイベントについて
□投稿者/ タイタン (5回)-(2014/06/05(Thu) 23:24:24)
お礼が遅くなりまして大変申し訳ありません。言語はC#を使っていました。言語を書いていなかったため、混乱させてしまいました。

もう少し自分のコードをしっかり見て、デバッグしたいと思います。本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -