Wiem, że mogę uzyskać bieżący stan przez WindowState, ale chcę wiedzieć, czy jest jakieś zdarzenie, które zostanie uruchomione, gdy użytkownik spróbuje zminimalizować formularz.
Wiem, że mogę uzyskać bieżący stan przez WindowState, ale chcę wiedzieć, czy jest jakieś zdarzenie, które zostanie uruchomione, gdy użytkownik spróbuje zminimalizować formularz.
Odpowiedzi:
Możesz użyć zdarzenia Resize i sprawdzić właściwość Forms.WindowState w zdarzeniu.
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
Aby wejść przed zminimalizowaniem formularza, musisz podłączyć się do procedury 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);
}
Aby zareagować po zminimalizowaniu formularza, dołącz do Resize
zdarzenia, jak wskazują inne odpowiedzi (uwzględnione tutaj dla kompletności):
private void Form1_Resize (object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do your action
}
}
Nie wiem o konkretnym zdarzeniu, ale Resize
zdarzenie jest uruchamiane, gdy formularz jest zminimalizowany, możesz sprawdzić FormWindowState.Minimized
w tym zdarzeniu
Dla osób, które szukają zdarzenia minimalizacji okien WPF:
Jest trochę inaczej. Do wywołania zwrotnego użyj WindowState:
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
// Do some stuff
}
}
Zdarzeniem do użycia jest StateChanged (zamiast Resize):
public Main()
{
InitializeComponent();
this.StateChanged += Form1_Resize;
}