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

わんくま同盟

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

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


(過去ログ 130 を表示中)
■76956 / )  Re[1]: WinCEのDialogResultのイベント順序について
□投稿者/ 魔界の仮面弁士 (475回)-(2015/08/31(Mon) 15:39:18)
2015/08/31(Mon) 16:13:21 編集(投稿者)

No76951 (トシ さん) に返信
> '--- Form2 --- Buttonコントロールを1個配置
> Public Class Form1
Form1 クラスなのに Form2…?


> この場合のログを Windows 7 SP1 と Windows Embedded Compact 7 で比較すると以下のようになります。
.NET Compact Framework に Form.FormClosing イベントは無いはずです。
(Form.Closing イベントなら、.NET / .NET Comapact の両方にあります)
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.form_events%28vs.90%29.aspx



> 上記のように、DialogResultの設定により、FormClosingイベントの順番が違います。
> なぜこのようなことが起きているのかは不明ではありますが、
> どのような対応をするのが正しい(よりベスト)なのかがわかりません。

DialogResult プロパティをセットしたときにフォームが閉じられるのは仕様です。
(モーダルなら非表示になり、モードレスなら破棄されます)
この点は、.NET Compact Framework でも .NET Framework でも同様です。

違うのは、いつ閉じられるのかという「タイミング」の問題です。



> この場合のログを Windows 7 SP1 と Windows Embedded Compact 7 で比較すると以下のようになります。

当方の実験結果:

【.NET Compact Framework 3.5 App on Windows 7 Pro SP1 /w CLR 2.0】

Form1:Click Start
 Form2:Click Start
 Form2:Click End
 Form2:Closing Start
 Form2:Closing End
Form1:Click End

【.NET Compact Framework 3.5 on Pocket PC 2003 SE エミュレータ】

Form1:Click Start
 Form2:Click Start
 Form2:Closing Start
 Form2:Closing End
 Form2:Closing Start
 Form2:Closing End
 Form2:Click End
Form1:Click End


今度は、【.NET Framework 3.5 on Windows 7 Pro SP1】 で実験。
ついでに、Application.Idle イベントが発生した時にもログを残しています。

(Application.Idle)
Form1:Click Start
(Application.Idle)
 Form2:Click Start
 Form2:Click End
(Application.Idle)
 Form2:Closing Start
 Form2:Closing End
Form1:Click End
(Application.Idle)


Form1 の Button1_Click にせよ
Form2 の Button1_Click にせよ
Form2 の Form2_Closing にせよ、
それらが開始されるのは、Application.Idle が呼ばれた後ということが分かります。

また、Appliation.Idle になるのは、End Sub 通過後(あるいは、ShgowDialog 時)に
限られます。これは、他の多くのイベントにおいても同じ動きです。


デスクトップ OS においては、イベント処理が終わってアイドル時にならないと、
Windows Message は基本的に処理されません。(実際に反映されるのは「End Subの後」です)
返信 編集キー/


管理者用

- Child Tree -