Rubrik: Oberfläche · Fenster | VB-Versionen: VB2005, VB2008 | 20.08.08 |
Klick auf Schließensymbol in der Fenstertitelzeile abfragen Durch Abhören der Windows-Messages (Subclassing) lässt sich gezielt das Schließen eines Fensters durch Klick auf das X in der Titelzeile abfragen. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.971 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wird eine Form geschlossen wird bekanntlich das Form_Closing Ereignis ausgelöst, so dass man entsprechend noch reagieren kann. Über die Eigenschaft e.ReasonCode lässt sich hier auch abfragen, warum die Form geschlossen werden soll. Im Gegensatz zu früher (VB5, VB6) bekommt man hier aber nicht mitgeteilt, dass die Form geschlossen werden soll, weil der Anwender auf das Schließensymbol geklickt bzw. den Schließen-Befehl aus dem Form-Systemmenü ausgewählt hat.
Nachfolgender Code zeigt daher eine Lösung, wie man gezielt auf das Schließensymbol reagieren kann:
Public Class Form1 Private Const WM_SYSCOMMAND As Integer = &H112 Private Const SC_CLOSE As Integer = &HF060 Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_SYSCOMMAND And m.WParam.ToInt32 = SC_CLOSE Then ' Form wird per Systemmenü bzw. Klick auf X geschlossen MsgBox("Form wird per X geschlossen!") ' ... End If MyBase.WndProc(m) End Sub ...
Soll bspw. verhindert werden, dass der Anwender ein Fenster über das Schließensymbol beenden kann, einfach ein "Exit Sub" einfügen:
Protected Overrides Sub WndProc(ByRef m As Message) If m.Msg = WM_SYSCOMMAND And m.WParam.ToInt32 = SC_CLOSE Then ' Form wird per Systemmenü bzw. Klick auf X geschlossen Exit Sub End If MyBase.WndProc(m) End Sub