C# 言語の FormClosing および FormClosed イベントの Args パラメーターの CloseReason 列挙
私のオペレーティング システムは Win7 Ultimate、VS バージョンは VS2012、.NET バージョンは .NET Framework 4.5 です。
フォームの FormClosing イベントでは、2 番目のパラメーター (FormClosingEventArgs 型) に列挙型変数 CloseReason があり、フォームの FormClosed イベントでも、2 番目のパラメーター (FormClosedEventArgs 型) に列挙型変数 CloseReason があります。 CloseReason 列挙は、名前空間 System.Windows.Forms の下にあります。
次のコード スニペットに示すように、CloseReason はフォームの FormClosing イベントの FormClosingEventArgs 型変数 e にあります。
private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { switch (e.CloseReason) { case CloseReason.None: { MessageBox.Show("Closing: CloseReason.None"); } break; case CloseReason.WindowsShutDown: { MessageBox.Show("Closing: CloseReason.WindowsShutDown"); } break; case CloseReason.MdiFormClosing: { MessageBox.Show("Closing: CloseReason.MdiFormClosing"); } break; case CloseReason.UserClosing: { MessageBox.Show("Closing: CloseReason.UserClosing"); } break; case CloseReason.TaskManagerClosing: { MessageBox.Show("Closing: CloseReason.TaskManagerClosing"); } break; case CloseReason.FormOwnerClosing: { MessageBox.Show("Closing: CloseReason.FormOwnerClosing"); } break; case CloseReason.ApplicationExitCall: { MessageBox.Show("Closing: CloseReason.ApplicationExitCall"); } break; } }
メタデータから、この列挙には次の合計 7 つの列挙値があります:
#region 程序集 System.Windows.Forms.dll, v4.0.0.0 // C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Windows.Forms.dll #endregion using System; namespace System.Windows.Forms { // 摘要: // 指定窗体关闭的原因。 public enum CloseReason { // 摘要: // 关闭原因未定义或者无法确定。 None = 0, // // 摘要: // 操作系统正在关闭所有应用程序以便准备关机。 WindowsShutDown = 1, // // 摘要: // 此多文档界面 (MDI) 窗体的父窗体正在关闭。 MdiFormClosing = 2, // // 摘要: // 用户正在通过用户界面 (UI) 关闭该窗体,例如通过单击窗体窗口上的“关闭”按钮,通过选择窗口控制菜单上的“关闭”按钮,或者通过按 Alt+F4 // 等方式关闭。 UserClosing = 3, // // 摘要: // Microsoft Windows 任务管理器正在关闭应用程序。 TaskManagerClosing = 4, // // 摘要: // 所有者窗体正在关闭。 FormOwnerClosing = 5, // // 摘要: // System.Windows.Forms.Application 类的 System.Windows.Forms.Application.Exit() // 方法被调用。 ApplicationExitCall = 6, } }
この列挙の MSDN はページを参照できます:
https://msdn.microsoft.com/en-us/library /system.windows.forms.closereason(v=vs.110).aspx
None 型を除き、この記事では 6 つの列挙値すべてをテストしました。テスト結果はここに記録されています。
1. CloseReason.WindowsShutDown
この CloseReason は、Windows がログアウトまたは閉じられたときにトリガーされます。ただし、Windows が現在のプログラムを閉じることができないと判断すると、プログラムを強制的に終了するため、ここに MessageBox などの要素を追加しないでください。 。
2. CloseReason.MdiFormClosing
現在のフォームが Mdi サブフォームであり、Mdi コンテナー フォームが閉じている場合、現在の FormClosing および FormClosed イベントがトリガーされると、この CloseReason が要求されます。
現在のフォームを MdiParent として使用して別のフォームを開く方法:
FormChild formChild = new FormChild(); formChild.MdiParent = this; formChild.Show();
(このフォームの IsMdiContainer を True に設定する必要があります)
3. CloseReason.UserClosing
ユーザーが現在のプログラムを手動で閉じます。 Close( ) 関数を呼び出すか、プログラムの右上隅にある「×」をクリックすると、終了理由は CloseReason.UserClosing になります。
4. CloseReason.TaskManagerClosing
このイベントは、タスク マネージャーによってウィンドウが閉じられたときにトリガーされますが、テスト中に、タスク マネージャーがウィンドウを閉じることが必須であることがわかりました。ブレークポイントを設定すると、FormClosing イベントがトリガーされた直後にプログラムがタスク マネージャーによって強制的に終了されることがわかります。この時間は非常に短いため、ここでメッセージ ボックスをポップアップするなどの操作は適切ではありません。それは無駄です)。
5. CloseReason.FormOwnerClosing
CloseReason.MdiFormClosing と同様に、フォーム A がフォーム B の所有者である場合、フォーム A が閉じられると、フォーム B が FormClosing および FormClosed イベントをトリガーするときにこの CloseReason が使用されます。
所有者としてのフォームに関する質問については、MSDN ページを参照してください:
https://msdn.microsoft.com/en-us/library/system.windows.window.owner(v=vs.110) .aspx
現在のフォームを所有者として使用して別のフォームを開くメソッド:
FormChild formChild2 = new FormChild(); formChild2.Owner = this; formChild2.Show();
6. CloseReason.ApplicationExitCall
Application.Exit() メソッドを呼び出してプログラムを終了する場合、CloseReason はこの値です。
最後に、FormClosing イベントと FormClosed イベントの呼び出しシーケンスについて説明します。
1. FormClosing イベントはフォームが閉じられる前にトリガーされ、FormClosed イベントはフォーム A の場合にトリガーされます。が mdi コンテナーであり、フォーム B の mdi 親がフォーム A である場合、イベントの呼び出しシーケンスは次のようになります:
フォーム B - FormClosing イベント - CloseReason
フォーム A - FormClosed イベント - CloseReason.UserClosing
3. A はフォーム B の所有者であり、イベントの呼び出し順序は次のとおりです:
フォーム B - FormClosing イベント - CloseReason.FormOwnerClosing
Window フォーム A - FormClosing イベント - CloseReason.UserClosing
フォーム B - FormClosed イベント - CloseReason.FormOwnerClosing
フォーム A - FormClosed イベント - CloseReason.UserClosing

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。
