2009-06-27 6 views

risposta

68

di entrare in prima il modulo è stato ridotto al minimo dovrete agganciare nella procedura 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); 
    } 

Per reagire dopo la forma è stata minimizzata gancio nel Resize evento come indicato dalle altre risposte (incluso qui per completezza):

private void Form1_Resize (object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do your action 
    } 
} 
+0

0xF030 è quando massimizzare dal normale stato della finestra. 0xF120 è quando si ingrandisce dalla barra di Windows – k4yaman

+0

In realtà, questo rileva solo l'evento Riduci * Clicca *! Quello che stai cercando è WM_SIZE (0x0005) e SIZE_MINIMIZED (1) –

16

Non so di uno specifico evento, ma i Resize evento viene generato quando il modulo viene ridotto al minimo, è possibile verificare la presenza di FormWindowState.Minimized in tal caso

+2

Questo combinato con un flag "lastState" privato è il modo più semplice per farlo. –

104

È possibile utilizzare l'evento Ridimensionamento e controllare la proprietà Forms.WindowState in caso.

private void Form1_Resize (object sender , EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do some stuff 
    } 
} 
+2

Si noti che questo sembra essere uno di quei posti in cui [Eccezioni possono essere ingerite] (http://stackoverflow.com/q/493395/11/119527). –

5

Per le persone che ricerca per Windows WPF minimizzare evento:

E 'un po' diverso. Per l'uso di callback WindowState:

private void Form1_Resize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) 
    { 
     // Do some stuff 
    } 
} 

L'evento da usare è StateChanged (invece Ridimensiona):

public Main() 
{ 
    InitializeComponent(); 
    this.StateChanged += Form1_Resize; 
} 
Problemi correlati