c# - pantalla - ¿Cómo detectar cuándo se está minimizando un formulario de Windows?
eventos en windows form (4)
No sé de un evento específico , pero el evento Resize
se activa cuando se minimiza el formulario, puede verificar FormWindowState.Minimized
en ese evento
Sé que puedo obtener el estado actual de WindowState, pero quiero saber si hay algún evento que se active cuando el usuario intente minimizar el formulario.
Para entrar antes de que se haya minimizado el formulario, deberá enganchar el procedimiento de 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 ha minimizado, enganche en el evento Resize
como lo indican las otras respuestas (aquí se incluye para completar):
private void Form1_Resize (object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do your action
}
}
Para las personas que buscan eventos WPF para minimizar ventanas:
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 cambio, cambiar el tamaño):
public Main()
{
InitializeComponent();
this.StateChanged += Form1_Resize;
}
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
}
}