フォームが閉じられる原因を取得する
スポンサーリンク
フォームが閉じられる原因を取得するのには、いくつかの方法が考えられます。その中で 1 番きめ細かく原因を取得できるのは、StackFrame を調べる方法でしょうか。(Form の WndProc メソッドをオーバーライドして、送られてくるメッセージを調べる方法などもあります)
以下の例では、私が把握できたすべての原因を列挙しています。(他にもありましたら、ご報告ください)
サンプルコード
以下にサンプルコードを示します。
C# 全般
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { System.Diagnostics.StackTrace hStack = new System.Diagnostics.StackTrace(true); // 7番目のスタックフレームを実行しているメソッド名で判断 switch (hStack.GetFrame(7).GetMethod().Name) { case "CallWindowProc": if (hStack.FrameCount > 14) { switch (hStack.GetFrame(14).GetMethod().Name) { case "WmSysCommand": MessageBox.Show("コントロール メニューから閉じるを選択しました"); break; case "WndProc": MessageBox.Show("Windows のセッションが終了しようとしています"); break; } } break; case "SendMessage": MessageBox.Show("コードから Close メソッドを実行しました"); break; case "DefMDIChildProc": MessageBox.Show("MDI 子フォームを閉じました"); break; case "DefFrameProc": if (this.ParentForm != null) { MessageBox.Show("MDI 親フォームを閉じました"); } break; case "RunDialog": MessageBox.Show("モーダル フォームを閉じました"); break; } }
関連するリファレンス
準備中です。