捕获窗口关闭事件

13

我想在Visual Studio 2008 IDE中捕捉关闭编辑器窗口(选项卡)的事件。

当我使用dte2.Application.Events.get_CommandEvents(null, 0).BeforeExecute时,我成功地捕获了这些事件:

  • File.Close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow 和其他一些事件。

如果窗口中的代码不可接受,我会停止该事件(CancelDefault = true)。

但是,如果我点击右侧的“X”按钮,就会出现“保存更改”对话框,选项卡与编辑器窗口关闭,而我没有任何捕获到的事件。在这种情况下,我可以捕捉WindowClosing事件,但无法取消该事件。

是否可以处理“X”按钮的单击并停止事件?


如果您点击“X”,但“保存更改”未出现,问题是否仍然存在? - Eran Betzalel
你为什么不在“保存更改”对话框方法中进行验证等操作呢?通常,我们会在窗口关闭事件中检查更改并启动“保存更改”提示。如果验证成功并且保存成功,“保存更改”方法将返回True,否则返回False...然后该值将被发送回窗口关闭事件处理程序,True表示继续关闭窗口,False表示拒绝并不执行任何操作。 - ewall
3个回答

1
在C#中,它会像这样:您添加Closing事件处理程序,然后...
void MyWindow_Closing(object sender, CancelEventArgs e)
        {
          if(something)
                e.Cancel = true;   //<- thats the magic part you want
}

0

如果你愿意使用一些Windows API代码,你可以尝试使用SetWindowsHookEx函数来拦截WM_CLOSEWM_QUITWM_DESTROY


0

我建议,查看处理 MDI 子窗口事件的方法!!

你提到的编辑器选项卡基本上是 MDI 子窗口的实例。

希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接