winform中form不能响应closing事件,为什么,有什么解决方法?(

解决方案 »

  1.   

    你可能没具体化窗体的Closing事件
      

  2.   

    closing事件是窗体事件里自己生成的,
    那注册事件在哪儿看,我在另一页面实现closing 没有问题
    如果要注册,在哪儿操作,谢谢
      

  3.   

    在构造子中添加代码:
    this.Closing +=new CancelEventHandler(Form1_Closing);在类中加入:
    private void Form1_Closing(object sender, CancelEventArgs e)
    {
    MessageBox.Show("dfas");
    }
      

  4.   

    执行Application.Exit()方法不会触发FormColsing事件!
      

  5.   

    打得太快!字错位:FormColsing >> FormClosing
      

  6.   

    到页面的属性里的"事件"项,看看closing事件是否与"Form1_Closing"关联上了
      

  7.   

    单步调试跟一下,看看关闭的时候closing事件会不会被执行,或者如果不执行那到底作了什么没有。
    “我在另一页面实现closing 没有问题”,这样的话应该是没有太多意外的吧
      

  8.   

    我是点击右上角的x按钮,难道它执行的是application.Exit();
      

  9.   

    我在另外页面试了,实现closing没有问题
    但是在这页面就是不能实现,我单步调试了,都没有走到
    closing事件中,为什么呢?
      

  10.   

    点击右上角的x按钮,是按照正常流程退出的,会触发Closing事件看来lz多半是没有把Closing事件注册到你的Form上
      

  11.   

    closing事件与"Form1_Closing"关联上了
      

  12.   

    把你的closing事件整段删除掉,编译,如果出错,去掉相应出错内容,再重新生成一个closeing事件
      

  13.   

    删掉也不出错,添加也不出错,就是没有运行closing事件
      

  14.   

    点击右上角的x按钮,是按照正常流程退出的,会触发Closing事件看来lz多半是没有把Closing事件注册到你的Form上
    该怎么把closing事件注册到form上呢?
      

  15.   

    你是不是使用了,Panel,或者是自定义的控件,估计是你的控件没有垃圾回收,有的时候是不能关的
      

  16.   

    对,我使用了自定义的tree控件,我试试换了
      

  17.   

    有意思,代码可以传一份给我看一下么?把窗体上的控件都删除,把代码只留CLOSING,这样就只需要传一个窗体就可以了
    [email protected]
      

  18.   

    找不到任何原因!删除Closing事件,后写入:
     public Form1()//Your WinForm Constructor
    {
       InitializeComponent();
       this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    }private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
       throw new Exception("The method or operation is not implemented.");
    }
      

  19.   

    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    ~~~~~~~~~~~~~~~~~~~这是2.0的吧1.1中对应的就是Closing
      

  20.   

    IDE有时会出现这种情况。
    你选中窗口后,到属性窗口的事件中,把Closing事件清空掉,然后双击加一个一试就OK,不行就重启动一次,编译器确实有时会出现这种怪现象。
      

  21.   

    重写 OnClosing 后没有调用 base.OnCloseing ?
      

  22.   

    另外可以重载wndProc也可以实现相同的功能。你如果在wndProc中拦截了消息,可能就不会触发了
      

  23.   

    liangxf0022 能说具体吗?
    怎么重载wndProc法,能写个大概吗?
      

  24.   

    protected override void WndProc(ref Message m)
    {
    System.Console.WriteLine(m.Msg.ToString());
    if (m.Msg == 130) // 消息的值不知道,
    {
    // closing operator
    MessageBox.Show("Closing is canceled");
    return;
    }
    base.WndProc (ref m);
    }
      

  25.   

    把其它的代碼都注釋掉,只留closing的.
    再跟蹤運行一下看下能不能响应
      

  26.   

    liangxf0022 
    我试过,我指向了WM_DESTROY 0x0002
    也是不行,它只能响应主窗体
    只有主窗体关闭后,它才会响应
    我用的是dotnetMagic 中的Docking窗体,而我要关的也是它,我想
    得知该窗体是否存在
      

  27.   

    - -# ,dotnetmagic没用过。估计是被这个外壳包装了吧。我喜欢用 DockPanel
      

  28.   

    我原来试过
    你要关闭的窗体没有真正的关闭
    所以不会执行closing事件,只要验证它是否可见,就行了
    在主窗体中 
    private Content cA;
    cA必须唯一,不能有重名的局部实例对象
    if(cA.Visible==false)
    {
      执行A;
    }
    else
    {
      执行B;
    }
      

  29.   

    意思就是窗体并没有真正的关闭,只是隐藏不可见而已,所以它并不会执行执行closing事件,  只是看它的可视状态,就可以相应的进行处理