分類:[VB.NET/VB2005 以降]
2015/08/31(Mon) 14:48:41 編集(投稿者)
2015/08/31(Mon) 14:47:48 編集(投稿者)
動作OS
Windows Embedded Compact 7
開発環境
Microsoft Windows 7 SP1
Microsoft Visual Studio 2008 (VB.netを使用)
.Net Compact Framework 3.5
質問内容
モーダルダイアログボックスの DialogResult と FormClosing イベントの関係について
本題
他に質問する場所もなく、こちらにてはじめて質問させていただきます。
どうぞよろしくお願いいたします。
作成した簡易プログラム
'--- Form1 --- Buttonコントロールを1個配置
Public Class Form1
Private Sub Button1_Click( sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim ret As DialogResult
Debug.WriteLine( "Form1:Click Start" )
Using wForm As Form = New Form2
ret = wForm.ShowDialog
End Using
Debug.WriteLine( "Form1:Click End" )
End Sub
End Class
'--- Form2 --- Buttonコントロールを1個配置
Public Class Form2
Private Sub Button1_Click( sender As System.Object, e As System.EventArgs) Handles Button1.Click
Debug.WriteLine( " Form2:Click Start" )
Me.DialogResult = Windows.Forms.DialogResult.Yes '-- テスト1
Me.DialogResult = Windows.Forms.DialogResult.No '-- テスト2 2度セットしていることに意味はありません。
Debug.WriteLine( " Form2:Click End" )
End Sub
Private Sub Form2_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Debug.WriteLine( " Form2:Closing Start" )
Debug.WriteLine( " Form2:Closing End" )
End Sub
End Class
上記テストプログラムを作成しました。
動作内容は
@プログラムを起動
AForm1 のボタンを押して Form2 を開く
BForm2 のボタンを押して、Form2 を閉じる
を行っています。
この場合のログを Windows 7 SP1 と Windows Embedded Compact 7 で比較すると以下のようになります。
Windows 7 SP1
Form1:Click Start
Form2:Click Start
Form2:Click End ※注目
Form2:Closing Start ※注目
Form2:Closing End ※注目
Form1:Click End
Windows Embedded Compact 7
Form1:Click Start
Form2:Click Start
Form2:Closing Start ※注目 DialogResult.Yes 設定タイミング
Form2:Closing End ※注目
Form2:Closing Start ※注目 DialogResult.No 設定タイミング
Form2:Closing End ※注目
Form2:Click End ※注目
Form1:Click End
上記のように、DialogResultの設定により、FormClosingイベントの順番が違います。
なぜこのようなことが起きているのかは不明ではありますが、
どのような対応をするのが正しい(よりベスト)なのかがわかりません。
※実は、この動作によって、フォームが正しく終了していないような動作が
発生しているようなのです。(2度めのFormClosing Endで停止)
お分かりになる方がおりましたら、アドバイスを頂ければと思います。
何卒よろしくお願いいたします。