Quello che sto cercando di fare è controllare una presentazione Powerpoint dalla mia applicazione WPF. Con il codice di questa domanda: C# - way to programmatically advance Powerpoint slide show? sta funzionando abbastanza bene per le diapositive normali.Advancing Powerpoint Slideshow programmaticamente con animazioni dei clic
Ma non appena arrivo a una diapositiva con un'animazione attivata da un mouseclick, non funziona come mi aspetterei che faccia. Quando si passa a una diapositiva di questo tipo, verrà visualizzata come previsto, ma quando chiamo objPres.SlideShowWindow.View.Next(), non fa nulla, e dopo il secondo o il terzo clic, passa direttamente alla diapositiva successiva, no animazione.
La cosa strana è: Quando chiamo objPres.SlideShowWindow.View.Next() tramite un timer, funziona! Le animazioni stanno funzionando come previsto.
Questo è il codice che ho:
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();
}
Sono sicuro che questa è una cosa facile e che sto sottovalutando qualcosa. Ma sto sbattere la testa su questo per un bel po 'di tempo :(
In questo caso, il problema potrebbe essere che ci sono le animazioni a tempo che vengono eseguiti automaticamente Se è così, ho il sospetto PPT non risponderebbe a? oSlideShowView.Next è finito l'elaborazione dell'animazione –
@ steve-rindsberg no, non ci sono animazioni temporizzate nel PPT che ho testato.Ho creato un progetto di test e l'ho caricato qui: https: // skydrive. live.com/redir.aspx?cid=edd93823761d5c8e&resid=EDD93823761D5C8E!10340&parid=EDD93823761D5C8E!139&authkey=!AMpcxEYSf90vv24, se vuoi dare un'occhiata a questo (c'è anche un test ppt in questo zip, che ha solo due diapositive, con un'animazione clic sulla prima diapositiva). – Malyngo
Non sono un ragazzo C (forte, piatto, più, meno) e sono inondato al momento. Se avessi avuto il tempo di guardare, comunque non sarebbe stato di grande aiuto. Scusate. –