Программное продвижение слайд-шоу Powerpoint с помощью анимации щелчка

Я пытаюсь управлять презентацией Powerpoint из моего приложения WPF. С кодом из этого вопроса: C # - способ программного продвижения слайд-шоу Powerpoint? он неплохо работает для обычных слайдов.

Но как только я перехожу к слайду с анимацией, запускаемой щелчком мыши, он начинает работать не так, как я ожидал. При переходе к такому слайду он будет отображаться, как ожидалось, но когда я вызываю objPres.SlideShowWindow.View.Next (), он ничего не делает, а после второго или третьего щелчка он переходит прямо к следующему слайду, без анимации .

Странная вещь: Когда я вызываю objPres.SlideShowWindow.View.Next () через таймер, он работает! Анимация работает, как ожидалось.

Вот код, который у меня есть:

Microsoft.Office.Interop.PowerPoint.Application oPPT;
Microsoft.Office.Interop.PowerPoint.Presentations objPresSet;
Microsoft.Office.Interop.PowerPoint.Presentation objPres;
Microsoft.Office.Interop.PowerPoint.SlideShowView oSlideShowView;
Timer slidetest;

private void OpenPPT(object sender, RoutedEventArgs e)
{
    //Create an instance of PowerPoint.
    oPPT = new Microsoft.Office.Interop.PowerPoint.Application();
    // Show PowerPoint to the user.
    oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
    objPresSet = oPPT.Presentations;


    OpenFileDialog Opendlg = new OpenFileDialog();

    Opendlg.Filter = "Powerpoint|*.ppt;*.pptx|All files|*.*";

    // Open file when user  click "Open" button  
    if (Opendlg.ShowDialog() == true)
    {
        string pptFilePath = Opendlg.FileName;
        //open the presentation
        objPres = objPresSet.Open(pptFilePath, MsoTriState.msoFalse,
        MsoTriState.msoTrue, MsoTriState.msoTrue);

        objPres.SlideShowSettings.ShowPresenterView = MsoTriState.msoFalse;
        System.Diagnostics.Debug.WriteLine(objPres.SlideShowSettings.ShowWithAnimation);
        objPres.SlideShowSettings.Run();

        oSlideShowView = objPres.SlideShowWindow.View;


        slidetest = new Timer(4000);
        slidetest.AutoReset = false;
        slidetest.Elapsed += new ElapsedEventHandler(slidetest_Elapsed);
        slidetest.Start();

    }
}

void slidetest_Elapsed(object sender, ElapsedEventArgs e)
{
    // this works as expected
    oSlideShowView.Next();
}

private void OnNextClicked(object sender, RoutedEventArgs e)
{
    // this doesn't work, animations aren't shown at all.
    oSlideShowView.Next();
}

Я уверен, что это что-то легкое, и я кое-что упускаю. Но я уже давно бьюсь об этом: (

6
задан Cœur 21 January 2019 в 12:03
поделиться