RT

解决方案 »

  1.   

    是一个子窗体,如果直接关闭,下次就不能show()了,还得重新new。
      

  2.   

    this.Closing += new 
    System.ComponentModel.CancelEventHandler(this.Form1_Closing); private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 

        // Hide the form... 
        this.Hide(); 
         // Cancel the close... 
        e.Cancel = true; 

      

  3.   

    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); 
    }
      

  4.   

    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.Visible = false;   //隐藏。
    return;

    base.WndProc(ref m); 
    }
      

  5.   

    我这里正好有一个
    public const int WM_SYSCOMMAND=0x112;
    public const int SC_CLOSE=0xF060;
    protected override void WndProc(ref Message m)
    {
    if( m.Msg == WM_SYSCOMMAND )
    {
    if(  m.WParam.ToInt32() == SC_CLOSE || m.WParam.ToInt32() == SC_MINIMIZE )
    {
    this.Visible = false;
    return;
    }
    }
    base.WndProc (ref m);
    }
      

  6.   

    二楼是正确的方法,也是通常的方法,除此之外还可以:
    protected override void Dispose( bool disposing )

     this.Hide();
      

  7.   

    看看MSDN,如果把子窗体类型设置成对话框,则点关闭按钮时没有调用Form.Close()事件。
      

  8.   

    按照 jiangsheng(蒋晟.Net[MVP]) 说的,达到了我的要的效果。只是我必须判断用户是不是要关闭整个程序,否则子窗口永远不关闭,程序就没办法正常退出。kingdhy(飞鹰) 说得听起来应该更好用,但是我没找到,再发个贴问。