Я знаю, что могу получить текущее состояние с помощью WindowState, но я хочу знать, есть ли какое-либо событие, которое запускается, когда пользователь пытается свернуть форму.
86
Вы можете использовать событие Resize и проверить свойство Forms.WindowState в событии.
private void Form1_Resize ( object sender , EventArgs e )
{
if ( WindowState == FormWindowState.Minimized )
{
// Do some stuff
}
}
Чтобы войти до того, как форма будет свернута, вам нужно подключиться к процедуре 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); }
Чтобы отреагировать после того, как форма была свернута, подключитесь к
Resize
событию, как указывают другие ответы (включены здесь для полноты):private void Form1_Resize (object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { // Do your action } }
источник
Я не знаю конкретного события, но
Resize
событие срабатывает, когда форма свернута, вы можете проверитьFormWindowState.Minimized
это событиеисточник
Для людей, которые ищут событие сворачивания окон WPF:
Это немного другое. Для обратного вызова используйте WindowState:
private void Form1_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { // Do some stuff } }
Используемое событие - StateChanged (вместо Resize):
public Main() { InitializeComponent(); this.StateChanged += Form1_Resize; }
источник