【问题标题】:Capture window close event捕获窗口关闭事件
【发布时间】:2010-11-25 07:07:09
【问题描述】:

我想在 Visual Studio 2008 IDE 中捕获关闭编辑器窗口(选项卡)的事件。 当我使用 dte2.Application.Events.get_CommandEvents(null, 0).BeforeExecute 我成功捕捉到了这样的事件:

  • 文件.关闭
  • File.CloseAllButThis
  • 文件.退出
  • Window.CloseDocumentWindow 和别的。

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

但是如果我点击右侧的“X”按钮,“保存更改”;对话框出现,标签 编辑器窗口关闭,我没有任何捕获的事件。在这种情况下,我可以捕获 WindowClosing 事件, 但不能取消活动。

是否可以处理“x”按钮单击和停止事件?

【问题讨论】:

  • 如果点击“X”,但没有出现“Save Changes”,请问问题还存在吗?
  • 是否有原因您没有在“保存更改”对话框方法中进行验证等?通常,可以让窗口关闭事件检查更改并启动“保存更改”提示。如果验证成功并且保存成功,则“保存更改”方法将返回 True,如果验证失败,则返回 False... 然后该值将被发送回窗口关闭事件处理程序,True 继续并关闭窗口或 False 拒绝它并且什么都不做。

标签: c# window visual-studio-addins envdte


【解决方案1】:

在 C# 中是这样的:添加 Closing 事件处理程序,然后

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

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      如果您愿意使用一些 Windows API 代码,您可以使用SetWindowsHookEx 函数设置一个挂钩来拦截WM_CLOSEWM_QUITWM_DESTROY

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        • 2023-03-29
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多