2011-12-06 15 views
6

Próbuję kontrolować prezentację Powerpoint z mojej aplikacji WPF. Kod z tego pytania: C# - way to programmatically advance Powerpoint slide show? działa całkiem dobrze dla normalnych slajdów.Zaawansowany pokaz slajdów Powerpoint programowo z animacjami kliknięć

Ale jak tylko dojdę do slajdu z animacją wywołaną przez kliknięcie myszą, to nie działa tak, jak bym tego oczekiwał. Po przejściu do takiego slajdu, pojawi się on zgodnie z oczekiwaniami, ale gdy zadzwonię do objPres.SlideShowWindow.View.Next(), nie robi nic, a po drugim lub trzecim kliknięciu przechodzi bezpośrednio do następnego slajdu, nie animacja.

Dziwna rzecz: Kiedy wywołuję objPres.SlideShowWindow.View.Next() za pomocą licznika czasu, działa! Animacje działają zgodnie z oczekiwaniami.

Jest to kod mam:

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(); 
} 

Jestem pewien, że to jest coś, łatwy i jestem widokiem coś. Ale zastanawiam się nad tym od dłuższego czasu: (

+0

W tym przypadku może być problem, że nie są planowane animacje, które są uruchamiane automatycznie Jeśli tak, podejrzewam, PPT nie zareaguje na? oSlideShowView.Next do it it przetwarzanie animacji –

+0

@ steve-rindsberg nie, nie ma animacji czasowych w testowanym przeze mnie PPT Stworzyłem projekt testowy i wysłałem go tutaj: https: // skydrive. live.com/redir.aspx?cid=edd93823761d5c8e&resid=EDD93823761D5C8E!10340&parid=EDD93823761D5C8E !139&authkey=!AMpcxEYSf90vv24, jeśli chcesz się z nim zapoznać (w tym pliku zip znajduje się również ppt testowy, który ma tylko dwa slajdy, z animacja kliknięcia na pierwszym slajdzie). – Malyngo

+0

Nie jestem facetem C (ostrym, płaskim, plus, minus) i jestem w tej chwili zatopiony. Gdybym miał czas na sprawdzenie, to i tak by nie pomogło. Przepraszam. –

Odpowiedz

3

Mam rozwiązanie mojego problemu na forach MSDN: Podczas korzystania z przycisku animacja nie jest odtwarzana poprawnie, ponieważ PPT nie ma fokusu. kiedy uaktywnić SlideShowWindows przed wywołaniem oSlideShowView.Next(), to działa:

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