Manchmal ist es hilfreich, wenn man während der Ausführung eines Prozesses in seinem Programm den “Schließen”-Button der Anwendung deaktiviert. Direkt mit WinForms-Mitteln ist dies allerdings nicht möglich.
Daher bleibt nur der Weg über Win32-API-Funktionalität, wobei ein Aktivieren/Deaktivieren des Schließen-Buttons z.B. über folgendes Property “IsCloseButtonEnabled” erreicht werden kann:
1: #region Win32 API Functions
2:
3: private const int SC_CLOSE = 0xF060; // ID des Schließen-Buttons
4: private const int MF_ENABLED = 0x0; // Wert, wenn Schließen-Button aktiv ist
5: private const int MF_DISABLED = 0x2; // Wert, wenn Schließen-Button inaktiv ist
6:
7: [DllImport("user32.dll")]
8: private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
9: [DllImport("user32.dll")]
10: private static extern int EnableMenuItem(IntPtr hMenu, int wIDEnable, int wValue);
11:
12: #endregion
13:
14: #region Properties
15:
16: private bool _isCloseButtonEnabled = true;
17: private bool IsCloseButtonEnabled
18: {
19: get { return _isCloseButtonEnabled; }
20: set
21: {
22: if(_isCloseButtonEnabled == value)
23: return;
24: _isCloseButtonEnabled = value;
25:
26: IntPtr sysMenu = GetSystemMenu(Handle, false);
27: EnableMenuItem(sysMenu, SC_CLOSE, value ? MF_ENABLED : MF_DISABLED);
28: }
29: }
30:
31: #endregion
Allerdings kann der Benutzer das Programm immer noch über die Taskleiste oder das Kontextmenü beenden. Daher sollte in jedem Fall zusätzlich eine ordnungsgemäße Behandlung des Closing
-Events der Form vorhanden sein…
Weiterhin ist anzumerken, dass ein einmaliges Deaktivieren des Schließen-Buttons nicht ausreicht. Verändert man die Größe der Form, minimiert oder maximiert sie, so ist der Button auf einmal wieder aktiviert! Daher ist es notwendig, einen Handler auf das Resize-Event der Form zu registrieren und dort den Schließen-Button immer wieder zu deaktivieren, wenn dies notwendig ist (d.h., wenn z.B. der Prozess aktiv ist, bei dem der Schließen-Button deaktiviert sein soll).
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen