■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の後」です)
|
|