Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过单击动画以编程方式推进Powerpoint幻灯片放映_C#_Animation_Powerpoint_Office Interop - Fatal编程技术网

C# 通过单击动画以编程方式推进Powerpoint幻灯片放映

C# 通过单击动画以编程方式推进Powerpoint幻灯片放映,c#,animation,powerpoint,office-interop,C#,Animation,Powerpoint,Office Interop,我试图做的是从我的WPF应用程序控制Powerpoint演示文稿。 使用此问题中的代码: 对于普通幻灯片,它工作得相当好 但是,当我看到一张由鼠标点击触发的动画幻灯片时,它就不能像我预期的那样工作了。 当转到这样的幻灯片时,它将按预期显示,但当我调用objPres.SlideShowWindow.View.Next()时,它什么也不做,在第二次或第三次单击后,它将直接转到下一张幻灯片,没有动画 奇怪的是: 当我通过计时器调用objPres.SlideShowWindow.View.Next()时

我试图做的是从我的WPF应用程序控制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();
}

我确信这是件容易的事情,我忽略了一些事情。但我在这方面花了很长时间:(

我在MSDN论坛上找到了问题的解决方案: 使用按钮时,动画无法正确播放,因为PPT没有焦点。当我在调用oSlideShowView.Next()之前激活幻灯片窗口时,它会工作:

private void OnNextClicked(object sender, RoutedEventArgs e)
{
    oSlideShowView.Application.SlideShowWindows[1].Activate();
    oSlideShowView.Next();
}

在这种情况下,问题可能是有自动运行的定时动画吗?如果有,我怀疑PPT不会响应oSlideShowView。下一步,直到它处理完动画为止。@steve rindsberg没有,我测试的PPT中没有定时动画。我已经创建了一个测试项目,并将其上载到这里:,如果你想上厕所的话我不是一个C(锐利、平直、加减)的家伙,我现在忙得不可开交。如果我有时间看的话,无论如何也帮不了什么忙。对不起,做得很好。非常有用