重写Form的Closing事件, 让它最小化关闭时也是一样

解决方案 »

  1.   

    Closing事件为
    public event CancelEventHandler Closing;
    并非virtual方法,不能够重写。
      

  2.   

    重写Form中的WinProc截取WM_CLOSE消息,把它改为最小化消息。我VS坏了,正在装。装好再把原代码贴出来
      

  3.   

    这样:
    在Closing事件中:
    private void frmBase_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    e.Cancel = true;//取消窗口关闭:
    //做你想做的事
    }
      

  4.   

    snof(雪狼)说的对,具体如下:
    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    e.Cancel=true;
    this.WindowState=FormWindowState.Minimized ;
    }
    不过这样,不论在那调用this.Close()都是最小化了,解决方法为,设一个布尔变量enable_close,当要退出时设enable_close=true;就可以退出了.完整代码如下:private bool enable_close=false;private void btnClose_Click(object sender, System.EventArgs e)
    {
    enable_close=true;
    this.Close();
    }private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    if(!enable_close)
    {
    e.Cancel=true;
    this.WindowState=FormWindowState.Minimized ;
    }
    }
      

  5.   

    private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
    this.WindowState=FormWindowState.Minimized;
    e.Cancel=true;
    }
      

  6.   

    我查了一下,的确可以用重写WndProc方法:protected override void WndProc(ref Message m)
      {
       const int WM_SYSCOMMAND = 0x0112;
       const int SC_CLOSE = 0xF060;
       if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
       {
        this.WindowState = FormWindowState.Minimized;
        return;
       }
       base.WndProc(ref m);
      }