PowerPoint,介绍关闭事件后

时间:2012-02-01 14:12:38

标签: events vsto powerpoint

PowerPoint 2007仅公开单个演示文稿关闭事件(PresentationClose),该事件在演示文稿结束前引发。

在我正在研究的几个代码中,我需要跟踪打开的演示文稿,因此要对其中一个被关闭做出反应。

通常PowerPoint提出的事件就足够了。除以下情况外。

如果演示文稿在关闭时尚未保存,PowerPoint将显示一个对话框,询问用户是否要保存演示文稿。如果用户单击是或否,一切都很好,因为演示文稿最终将被关闭。但他也可以选择取消封闭......

在这种情况下,会引发close事件,演示文稿仍然存在但我的应用程序不知道它。

有人可以给我一些解决方法吗?也许是在用户点击取消后引发的事件?

2 个答案:

答案 0 :(得分:1)

您可能希望在PresentationBeforeClose中添加PresentationCloseFinalPowerPoint 2010

如果用户点击“是”,则可能会出现同样的问题。要在提示时保存,然后点击“取消”#39;退出“保存演示文稿”窗口。这仍然使应用程序在应用程序中保持活动状态。

PowerPoint 2007解决方法我提出了(inspiration from here):


void Application_PresentationClose(PowerPoint.Presentation presentation)
{
    if (presentation.Saved == MsoTriState.msoFalse)
    {
        MessageBoxResult savePrompt = MessageBox.Show(string.Format("Do you want to save the changes you made to {0}?", presentation.Application.ActiveWindow.Caption), Globals.ThisAddIn.Application.Name, MessageBoxButton.YesNoCancel, MessageBoxImage.Warning, MessageBoxResult.Yes);
        if (savePrompt == MessageBoxResult.Yes)
            System.Windows.Forms.SendKeys.Send("Y"); // trigger default SaveAs prompt
        else if (savePrompt == MessageBoxResult.No)
            System.Windows.Forms.SendKeys.Send("N"); // discard presentation
        else
            System.Windows.Forms.SendKeys.Send("{ESC}"); // disables default SaveAs prompt
    }
}

答案 1 :(得分:0)

这样的事情会这样做,我想:

Private Sub PPTEvent_PresentationClose(ByVal Pres As Presentation)

  Dim x as Long
  with Application.Presentations
  If .Count > 0 Then
    For x = 1 to .Count
      If .Item(x) = Pres Then
         ' the presentation that triggered the event
         ' is still open; user must've canceled
      Else

      End If
    Next
  End if