天天看点

C# 捕获窗体最大化和最小化事件

protected override void OnResize(EventArgs e) 

         { 

             if(WindowState == FormWindowState.Maximized) 

             { 

                 //最大化时所需的操作 

                 MessageBox.Show("max");

             } 

             else if(WindowState == FormWindowState.Minimized) 

             { 

                 //最小化时所需的操作

                 MessageBox.Show("min");

             } 

         }  


 *****但是问题出现了,最大化以后,内部的控件不能随anchar发生变化。。。。。,问题出在哪里呢?

 于是又找到了一些代码,如下


虽然Form类没有提供Minimize的事件,但还是可以通过重载Deactive来实现
 当Form失去焦点后,测试WindowState取得Form状态,若为Minimized既是最小化事件。
 本例为最小化后隐藏窗口: 
  
private
   
  void
   Form1_Deactivate(
  object
   sender, EventArgs e)
        
  {
            if (this.WindowState == FormWindowState.Minimized)
                this.Visible = false;
        }
还有种方法更加直接,重载WndProc:

 
 const
  
 int
  WM_SYSCOMMAND 
 =
  
 0x112
 ;
 const
  
 int
  SC_CLOSE 
 =
  
 0xF060
 ;
 const
  
 int
  SC_MINIMIZE 
 =
  
 0xF020
 ;
 const
  
 int
  SC_MAXIMIZE 
 =
  
 0xF030
 ;
 protected
  
 override
  
 void
  WndProc(
 ref
  Message m)
 {
    if (m.Msg == WM_SYSCOMMAND)
    {
        if (m.WParam.ToInt32() == SC_MINIMIZE)
        {
            this.Visible = false;
            return;
        }
    }
    base.WndProc(ref m);
}