如何检测窗体何时被最小化?

我知道我可以通过WindowState获取当前状态,但是我想知道是否有任何事件会在用户尝试最小化表单时触发。

您可以使用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在该事件

对于searchWPF窗口最小化事件的人员:

这有点不同。 对于callback使用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; }