PowerPoint, после презентации закрыть мероприятие - PullRequest
3 голосов
/ 01 февраля 2012

PowerPoint 2007 предоставляет только одно событие закрытия презентации (PresentationClose), которое возникает перед закрытием презентации.

В нескольких частях кода, над которыми я работаюМне нужно отслеживать открытые презентации и, следовательно, реагировать на закрытие одной из них.

Как правило, достаточно событий, предлагаемых PowerPoint.За исключением следующего случая.

Если презентация не была сохранена при закрытии, PowerPoint отображает диалоговое окно, спрашивающее пользователя, хочет ли он сохранить свою презентацию или нет.Если пользователь нажимает «да» или «нет», все в порядке, так как презентация будет закрыта.Но он также может отменить закрытие ...

В этом случае событие закрытия вызывается, презентация все еще там, но мое приложение не знает об этом.

Может кто-нибудь дать мнекакой-то обходной путь?Может быть, событие возникло после того, как пользователь нажал «Отмена»?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Вы, вероятно, хотите PresentationBeforeClose или PresentationCloseFinal, который был добавлен в PowerPoint 2010 .

Эта проблема также может возникать, если пользователь нажимает «Да» для сохранения в приглашении, а затем нажимает «Отмена» для выхода из окна «Сохранить презентацию». Это по-прежнему поддерживает представление в приложении.

Обходной путь PowerPoint 2007 Я придумал ( вдохновение отсюда ):

<Ч />
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
    }
}
0 голосов
/ 02 февраля 2012

Что-то вроде этого сделало бы это, я думаю:

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
...