Heim >Backend-Entwicklung >C#.Net-Tutorial >CloseReason-Aufzählung von Args-Parametern in FormClosing- und FormClosed-Ereignissen in der C#-Sprache
Mein Betriebssystem ist Win7 Ultimate, die VS-Version ist VS2012 und die .NET-Version ist .NET Framework 4.5.
Im FormClosing-Ereignis des Formulars gibt es eine Aufzählungsvariable CloseReason unter dem zweiten Parameter (Typ FormClosingEventArgs) und im FormClosed-Ereignis des Formulars gibt es auch eine Aufzählungsvariable unter dem zweiten Parameter (FormClosedEventArgs). Typ) CloseReason . Die CloseReason-Enumeration befindet sich unter dem Namespace System.Windows.Forms.
Wie im folgenden Codeausschnitt gezeigt, befindet sich CloseReason in der FormClosingEventArgs-Typvariable e des FormClosing-Ereignisses des Formulars.
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; } }
Aus Sicht der Metadaten hat diese Aufzählung insgesamt die folgenden 7 Aufzählungswerte:
#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, } }
Der MSDN dieser Aufzählung kann auf die Seite verweisen:
https://msdn.microsoft.com/en-us/library/system.windows.forms.closereason(v=vs.110).aspx
Mit Ausnahme des Typs „Keine“ dieser Artikel hat alle sechs Aufzählungswerte. Der Test wurde durchgeführt und die Ergebnisse des Tests werden hier aufgezeichnet.
1. CloseReason.WindowsShutDown
Dieser CloseReason wird ausgelöst, wenn Windows abgemeldet oder geschlossen wird. Fügen Sie hier jedoch keine Elemente wie MessageBox hinzu, da Windows feststellt, dass das aktuelle Programm nicht mehr verfügbar ist Wenn das Programm geschlossen wird, wird das Schließen dieses Programms erzwungen.
2. CloseReason.MdiFormClosing
Wenn das aktuelle Formular ein MDI-Unterformular ist und das MDI-Containerformular geschlossen ist, wird dieser CloseReason angefordert, wenn die aktuellen Ereignisse FormClosing und FormClosed ausgelöst werden.
So öffnen Sie ein anderes Formular als MdiParent mit dem aktuellen Formular:
FormChild formChild = new FormChild(); formChild.MdiParent = this; formChild.Show();
(Sie müssen den IsMdiContainer dieses Formulars auf True setzen)
3 .UserClosing
Der Benutzer schließt das aktuelle Programm manuell, indem er beispielsweise die Funktion Close() aufruft oder auf das „ד in der oberen rechten Ecke des Programms klickt. Der Grund für das Schließen ist CloseReason.UserClosing.
4. CloseReason.TaskManagerClosing
Dieses Ereignis wird ausgelöst, wenn das Fenster vom Task-Manager geschlossen wird. Beim Testen habe ich jedoch festgestellt, dass es für den Task-Manager obligatorisch ist, das Fenster zu schließen . Nach dem Festlegen des Haltepunkts können Sie feststellen, dass das Programm kurz nach Auslösen des FormClosing-Ereignisses vom Task-Manager zwangsweise geschlossen wird. Diese Zeit ist sehr kurz, daher ist es nicht geeignet, hier Dinge wie das Öffnen der MessageBox zu tun (weil es ist nutzlos).
5. CloseReason.FormOwnerClosing
ist ähnlich wie CloseReason.MdiFormClosing, wenn Formular A geschlossen wird, löst Formular B die Ereignisse FormClosing und FormClosed aus. ThisCloseReason.
Bezüglich der Ausgabe des Formulars als Eigentümer können Sie sich auf die MSDN-Seite beziehen:
https://msdn.microsoft.com/en-us/library/system.windows.window .owner(v =vs.110).aspx
So verwenden Sie das aktuelle Formular als Eigentümer, um ein anderes Formular zu öffnen:
FormChild formChild2 = new FormChild(); formChild2.Owner = this; formChild2.Show();
6. CloseReason.ApplicationExitCall
Anwendung aufrufen. Wenn die Exit()-Methode das Programm beendet, ist CloseReason dieser Wert.
Lassen Sie uns abschließend über die Aufrufsequenz der Ereignisse FormClosing und FormClosed sprechen:
1 Das Ereignis FormClosing wird ausgelöst, bevor das Formular geschlossen wird, und das Ereignis FormClosed wird ausgelöst, nachdem das Formular geschlossen wird .
2. Wenn Formular A ein MDI-Container ist und das übergeordnete MDI von Formular B Formular A ist, lautet die aufrufende Ereignissequenz:
Form B – FormClosing-Ereignis – CloseReason. MdiFormClosing
Fenster Form A – FormClosing-Ereignis – CloseReason.UserClosing
Form B – FormClosed-Ereignis – CloseReason.MdiFormClosing
Form A – FormClosed-Ereignis – CloseReason.UserClosing
3. Wenn Formular A der Eigentümer von Formular B ist, lautet die Reihenfolge der aufrufenden Ereignisse:
Form B – FormClosing-Ereignis – CloseReason.FormOwnerClosing
Form A – FormClosing-Ereignis – CloseReason.UserClosing
Form B – FormClosed-Ereignis – CloseReason.FormOwnerClosing
Form A – FormClosed-Ereignis – CloseReason.UserClosing