So che posso ottenere lo stato corrente da WindowState, ma voglio sapere se c'è qualche evento che si attiva quando l'utente cerca di ridurre a icona il modulo.
So che posso ottenere lo stato corrente da WindowState, ma voglio sapere se c'è qualche evento che si attiva quando l'utente cerca di ridurre a icona il modulo.
Risposte:
È possibile utilizzare l'evento Resize e controllare la proprietà Forms.WindowState nell'evento.
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
Per entrare prima che il modulo sia stato ridotto a icona, dovrai collegarti alla procedura 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);
}
Per reagire dopo che il modulo è stato minimizzato agganciarsi Resizeall'evento come sottolineano le altre risposte (incluso qui per completezza):
private void Form1_Resize (object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do your action
}
}
Non conosco un evento specifico , ma l' Resizeevento si attiva quando il modulo è ridotto a icona, puoi controllare FormWindowState.Minimizedin quell'evento
Per le persone che cercano eventi di minimizzazione delle finestre WPF:
È un po 'diverso. Per il callback utilizzare WindowState:
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do some stuff
}
}
L'evento da utilizzare è StateChanged (invece Resize):
public Main()
{
InitializeComponent();
this.StateChanged += Form1_Resize;
}