77 votes

Comment détecter quand un formulaire Windows est minimisé?

Je sais que je peux obtenir l'état actuel par WindowState, mais je veux savoir s'il existe un événement susceptible de se déclencher lorsque l'utilisateur tente de minimiser le formulaire.

112voto

Steve Dignan Points 3742

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

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

74voto

ChrisF Points 74295

Pour entrer avant que le formulaire ait été minimisé, vous devez vous connecter à 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 && this.minimizeToTray)
                {
                    MinimizeToTray();  // For example
                }
                break;
        }
        base.WndProc(ref m);
    }
 

Pour réagir après la minimisation du formulaire, accrochez-vous à l'événement Resize , comme le soulignent les autres réponses (inclus ici pour plus de détails):

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

17voto

Dan F Points 7777

Je ne connais pas d'événement spécifique , mais l'événement Resize déclenche lorsque le formulaire est réduit au minimum, vous pouvez vérifier s'il existe FormWindowState.Minimized dans cet événement.

6voto

Chaos Points 21

Pour les personnes qui recherchent un événement minimisant une fenêtre WPF:

C'est un peu différent. Pour le rappel, utilisez WindowState:

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X