2011-12-06 45 views
6

我想要做的是從我的WPF應用程序控制Powerpoint演示文稿。 用這個問題的代碼: C# - way to programmatically advance Powerpoint slide show? 它對正常的幻燈片工作得很好。使用點擊動畫以編程方式推進Powerpoint幻燈片

但是,只要我滑動鼠標點擊觸發的動畫,它就不會像我期望的那樣工作。 進入這樣的幻燈片時,它會按預期顯示,但當我調用objPres.SlideShowWindow.View.Next()時,它什麼都不做,在第二次或第三次單擊後,它會直接跳到下一張幻燈片,否動畫。

奇怪的是: 當我通過Timer調用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(); 
} 

我相信這是一件很容易,我忽視的東西。但我在這上面敲了很長時間:(

+0

在這種情況下,可能的問題是,有自動運行的定時動畫,如果是的話,我懷疑PPT不會來應對呢? oSlideShowView.Next直到它完成處理動畫 –

+0

@ steve-rindsberg不,在我測試的PPT中沒有定時動畫。我已經創建了一個測試項目並將其上傳到https:// skydrive。 live.com/redir.aspx?cid=edd93823761d5c8e&resid=EDD93823761D5C8E!10340&parid=EDD93823761D5C8E!139&authkey=!AMpcxEYSf90vv24,如果你想看看它(也有一個測試PPT在這個拉鍊,它只有兩個幻燈片,與第一張幻燈片上的點擊動畫)。 – Malyngo

+0

我不是一個C(鋒利,平坦,加號,減號)的傢伙,我現在淹沒了。如果我有時間看,這無關緊要。抱歉。 –

回答

3

我在MSDN論壇上得到了我的問題的解決方案: 使用該按鈕時,動畫無法正確播放,因爲PPT沒有焦點。當我打電話oSlideShowView.Next()之前激活SlideShowWindows,它的工作原理:

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