フォームが閉じられた理由を取得する - C#
フォームが閉じられる際の理由を取得するコードを紹介します。
フォームが閉じられる際には、フォームのFormClosedイベントが発生します。FormClosedイベントの引数"FormClosedEventArgs"の"CloseReason"プロパティの値を確認することでフォームが閉じられる理由を取得できます。
FormClosedEventArgs.CloseReasonの値
FormClosedEventArgs.CloseReasonプロパティの値は以下のものがあります。
メンバ名 | 説明 | |
ApplicationExitCall | Application クラスの Exit メソッドが呼び出されました。 |
FormOwnerClosing | 所有側のフォームが閉じられようとしています。 |
MdiFormClosing | このマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) フォームの親フォームが閉じられようとしています。 |
None | フォームが閉じられる理由が定義されなかったか、確認できませんでした。 |
TaskManagerClosing | Microsoft Windows タスク マネージャがアプリケーションを終了しようとしています。 |
UserClosing | ユーザーが、フォーム ウィンドウの [閉じる] ボタンを押す、ウィンドウのコントロール メニューの [閉じる] をクリックする、Alt キーと F4 キーを同時に押すなどの方法で、ユーザー インターフェイス (UI) を通じてフォームを閉じようとしています。 |
WindowsShutDown | オペレーティング システムが終了前にすべてのアプリケーションを終了しようとしています。 |
|
UI
以下のUIを準備します。
コード
以下のコードを記述します。フォームのFormClosedイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormCloseReason
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
{
switch (e.CloseReason) {
case CloseReason.ApplicationExitCall:
MessageBox.Show("Application クラスの Exit メソッドより閉じられます。");
break;
case CloseReason.FormOwnerClosing:
MessageBox.Show("所有側のフォームが閉じられようとしています。 ");
break;
case CloseReason.MdiFormClosing:
MessageBox.Show("このマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) フォームの親フォームが閉じられようとしています。");
break;
case CloseReason.None:
MessageBox.Show("フォームが閉じられる理由が定義されなかったか、確認できませんでした。");
break;
case CloseReason.TaskManagerClosing:
MessageBox.Show("Microsoft Windows タスク マネージャがアプリケーションを終了しようとしています。");
break;
case CloseReason.UserClosing:
MessageBox.Show("ユーザーが、ユーザー インターフェイス (UI) を通じてフォームを閉じようとしています。 ");
break;
case CloseReason.WindowsShutDown:
MessageBox.Show("オペレーティング システムが終了前にすべてのアプリケーションを終了しようとしています。 ");
break;
}
}
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
ウィンドウの右上の[×]ボタンをクリックしてウィンドウを閉じます。ユーザーインタフェイスからウィンドウが閉じられたことを示すメッセージが表示されます。(下図参照)
タスクマネージャーからアプリケーションを終了した場合は下図のメッセージが表示されます。
補足
Windowメッセージを取得して判定する方法もあります。Windowメッセージを取得する場合はWndProc()メソッドをオーバーライドしウィンドウメッセージを取得します。監視するウィンドウメッセージは以下になります。
- WM_ENDSESSION = 0x16;
- Windowsのシャットダウンによりフォームが閉じられる
- WM_SYSCOMMAND = 0x112 and SC_CLOSE = 0xF060L;
- ユーザーにより、ユーザーインタフェイス(UI)no操作により閉じられる
- WM_CLOSE = 0x0010;
のメッセージを取得します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用