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.
Réponses
Trop de publicités?
Steve Dignan
Points
3742
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
}
}
Dan F
Points
7777
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;
}