2009-09-03 121 views
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”按钮点击和停止事件是否可行?

+0

如果您单击“X”,但“保存更改”不会出现,问题是否仍然存在? – 2009-09-04 23:08:07

+0

您有没有在“保存更改”对话框方法中进行验证等原因? 通常,可以通过窗口关闭事件检查更改并启动“保存更改”提示。如果验证结果良好且保存成功,则“保存更改”方法将返回True;如果验证失败,则返回False ...然后,该值将被发送回窗口关闭事件处理程序,返回True并关闭窗户或假的拒绝它,什么都不做。 – ewall 2009-09-08 20:14:46

回答

0

如果您愿意使用某些Windows API代码,则可以使用SetWindowsHookEx函数设置挂接以拦截WM_CLOSE,WM_QUITWM_DESTROY

1

在C#中它会是这样的:您添加关闭事件处理程序,然后

void MyWindow_Closing(object sender, CancelEventArgs e) 
     { 
      if(something) 
       e.Cancel = true; //<- thats the magic part you want 
} 
0

我建议,检查处理MDI子窗口事件的线!

您所指的编辑器选项卡基本上是MDI子窗口的一个实例。

希望这会有所帮助!