フォームが閉じられる際の理由を取得するコードを紹介します。
フォームが閉じられる際には、フォームのFormClosedイベントが発生します。FormClosedイベントの引数"FormClosedEventArgs"の"CloseReason"プロパティの値を確認することでフォームが閉じられる理由を取得できます。
FormClosedEventArgs.CloseReasonプロパティの値は以下のものがあります。
メンバ名 | 説明 | |
---|---|---|
ApplicationExitCall | Application クラスの Exit メソッドが呼び出されました。 | |
FormOwnerClosing | 所有側のフォームが閉じられようとしています。 | |
MdiFormClosing | このマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) フォームの親フォームが閉じられようとしています。 | |
None | フォームが閉じられる理由が定義されなかったか、確認できませんでした。 | |
TaskManagerClosing | Microsoft Windows タスク マネージャがアプリケーションを終了しようとしています。 | |
UserClosing | ユーザーが、フォーム ウィンドウの [閉じる] ボタンを押す、ウィンドウのコントロール メニューの [閉じる] をクリックする、Alt キーと F4 キーを同時に押すなどの方法で、ユーザー インターフェイス (UI) を通じてフォームを閉じようとしています。 | |
WindowsShutDown | オペレーティング システムが終了前にすべてのアプリケーションを終了しようとしています。 | |
以下の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()メソッドをオーバーライドしウィンドウメッセージを取得します。監視するウィンドウメッセージは以下になります。
のメッセージを取得します。