Sé que puedo obtener el estado actual mediante WindowState, pero quiero saber si hay algún evento que se active cuando el usuario intente minimizar el formulario.
Sé que puedo obtener el estado actual mediante WindowState, pero quiero saber si hay algún evento que se active cuando el usuario intente minimizar el formulario.
Respuestas:
Puede usar el evento Resize y verificar la propiedad Forms.WindowState en el evento.
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
Para ingresar antes de que el formulario se haya minimizado, deberá conectarse al procedimiento 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);
}
Para reaccionar después de que el formulario se haya minimizado, ingrese al Resize
evento como señalan las otras respuestas (incluidas aquí para completar):
private void Form1_Resize (object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do your action
}
}
No sé de un evento específico , pero el Resize
evento se activa cuando se minimiza el formulario, puede verificar FormWindowState.Minimized
en ese evento
Para las personas que buscan eventos de minimización de ventanas de WPF:
Es un poco diferente. Para la devolución de llamada, use WindowState:
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do some stuff
}
}
El evento a usar es StateChanged (en lugar de Resize):
public Main()
{
InitializeComponent();
this.StateChanged += Form1_Resize;
}