Wiem, że mogę uzyskać bieżący stan przez WindowState, ale chcę wiedzieć, czy jest jakieś zdarzenie, które zostanie uruchomione, gdy użytkownik spróbuje zminimalizować formularz.
84
Możesz użyć zdarzenia Resize i sprawdzić właściwość Forms.WindowState w zdarzeniu.
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
Aby wejść przed zminimalizowaniem formularza, musisz podłączyć się do procedury WndProc:
private const int WM_SYSCOMMAND = 0x0112; private const int SC_MINIMIZE = 0xF020; [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] protected override void WndProc(ref Message m) { switch(m.Msg) { case WM_SYSCOMMAND: int command = m.WParam.ToInt32() & 0xfff0; if (command == SC_MINIMIZE) { // Do your action } // If you don't want to do the default action then break break; } base.WndProc(ref m); }
Aby zareagować po zminimalizowaniu formularza, dołącz do
Resize
zdarzenia, jak wskazują inne odpowiedzi (uwzględnione tutaj dla kompletności):private void Form1_Resize (object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { // Do your action } }
źródło
Nie wiem o konkretnym zdarzeniu, ale
Resize
zdarzenie jest uruchamiane, gdy formularz jest zminimalizowany, możesz sprawdzićFormWindowState.Minimized
w tym zdarzeniuźródło
Dla osób, które szukają zdarzenia minimalizacji okien WPF:
Jest trochę inaczej. Do wywołania zwrotnego użyj WindowState:
private void Form1_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { // Do some stuff } }
Zdarzeniem do użycia jest StateChanged (zamiast Resize):
public Main() { InitializeComponent(); this.StateChanged += Form1_Resize; }
źródło