【C#】Form.Closingイベントの制御

ウィンドウアプリケーションで「Alt + F4」といったキー操作により
画面が閉じられるのを制御するにWndProcメソッドをオーバーライドするのが
普通だと思い込んでいたのですが、
.NET Framework 2.0以降であればCloseReasonプロパティを使用すればよりシンプルにできました。


CloseReasonプロパティについて

CloseReasonプロパティの内容については以下の通りです。


列挙体 説明
ApplicationExitCall Application.Exitメソッドが呼び出された。
FormOwnerClosing 呼び出し元のフォーム画面が閉じられようとしている。
MdiFormClosing 呼び出し元のMDI親フォームが閉じられようとしている。
None なんで閉じられようとしているのかわかんね┐(´ー`)┌
TaskManagerClosing タスクマネージャーにによってアプリが終了させられようとしている。
UserClosing ユーザ操作(×ボタンクリック、Alt+F4押下etc…)によって画面が閉じられようとしている。
※注意点有
WindowsShutDown OSのシャットダウン処理によってアプリが終了させられようとしている。

FormOwnerClosingの注意点について

FormOwnerClosingの説明は公式リファレンスに以下のように書かれています。

ユーザーが、フォーム ウィンドウの [閉じる] ボタンを押す、ウィンドウのコントロール メニューの [閉じる] をクリックする、Alt キーと F4 キーを同時に押すなどの方法で、ユーザー インターフェイス (UI) を通じてフォームを閉じようとしています。

しかし、Form.Closeメソッドを実行した時も「UserClosing」として処理される為、
フラグ管理を行う必要がありそうです…(;´Д`)

Closeメソッド内の処理

Form.Closeメソッドのコードを見たらしっかりとUserClosingをセットしていました…


サンプルコード

Form.Closeメソッドを呼ぶ前にフラグを操作しているだけの簡単なプログラムです。

実行結果

実行結果は以下の通りです。

Alt+F4押下時

ボタン押下時

キー制御を行うよりシンプルにコーディングできるので多少は使えるのかな…(=゚ω゚)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください