2009-06-27 6 views

Répondre

68

Pour entrer en avant la forme a été réduite au minimum, vous devrez brancher dans la procédure 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); 
    } 

Pour réagir après la forme a été réduite au minimum dans le crochet Resize événement comme les autres réponses le soulignent (inclus ici pour l'exhaustivité):

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

0xF030 est en état de maximiser la fenêtre normale. 0xF120 est lors de la maximisation à partir de la barre des fenêtres – k4yaman

+0

En fait, cela n'atteint que l'événement Minimize * Click *! Ce que vous cherchez est WM_SIZE (0x0005) & SIZE_MINIMIZED (1) –

16

Je ne sais pas d'un événement spécifique , mais l'événement se déclenche Resize lorsque le formulaire est réduit, vous pouvez vérifier FormWindowState.Minimized dans cet événement

+2

Cela combiné avec un drapeau privé "lastState" est le moyen le plus facile à faire à ce sujet. –

104

Vous pouvez utiliser l'événement Resize et vérifiez la propriété Forms.WindowState dans l'éventualité.

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

Notez que cela semble être l'un de ces endroits où [Exceptions peuvent être avalés] (http://stackoverflow.com/q/4933958/119527). –

5

Pour les personnes qui cherchent des fenêtres WPF événement réduisant au minimum:

Il est un peu différent. Pour l'utilisation de rappel WindowState:

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

L'événement à utiliser est StateChanged (au lieu Redimensionner):

public Main() 
{ 
    InitializeComponent(); 
    this.StateChanged += Form1_Resize; 
} 
Questions connexes