ホームページ バックエンド開発 C#.Net チュートリアル C# 言語の FormClosing および FormClosed イベントの Args パラメーターの CloseReason 列挙

C# 言語の FormClosing および FormClosed イベントの Args パラメーターの CloseReason 列挙

Nov 22, 2016 pm 04:17 PM
c#

私のオペレーティング システムは 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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

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

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# のアクセス修飾子 C# のアクセス修飾子 Sep 03, 2024 pm 03:24 PM

C# のアクセス修飾子のガイド。 C# のアクセス修飾子の種類について、例と出力とともに説明しました。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

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

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

C# の階乗 C# の階乗 Sep 03, 2024 pm 03:34 PM

C# の Factorial のガイド。ここでは、C# での階乗の概要について、さまざまな例とコード実装とともに説明します。

See all articles