2011-12-06 11 views
6

私がやろうとしていることは、自分のWPFアプリケーションからPowerpointプレゼンテーションをコントロールすることです。 この質問のコードは C# - way to programmatically advance Powerpoint slide show? 通常のスライドではうまくいきます。クリックアニメーションでプログラム的にパワーポイントのスライドショーを進める

しかし、マウスクリックでトリガーされたアニメーションを持つスライドに着くとすぐに、それは私が期待するように機能しません。 このようなスライドに行くと、期待どおりに表示されますが、objPres.SlideShowWindow.View.Next()を呼び出すと何も起こりません.2回目または3回目のクリック後、次のスライドに直接移動します。アニメーション。

奇妙なことは: 私は、タイマを介して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、これを見たい場合は(このzipにはテスト用のpptもあります。このzipには2つのスライドがあり、最初のスライドのクリックアニメーション)。 – Malyngo

+0

私はC(シャープ、フラット、プラス、マイナス)の男ではなく、現時点では圧倒されています。私が見る時間があったら、それは何とか助けにはならないでしょう。ごめんなさい。 –

答えて

3

MSDNフォーラムで ボタンを使用すると、PPTにフォーカスがないため、アニメーションが正しく再生されません。私はoSlideShowView.Next()を呼び出す前にSlideShowWindowsをアクティブにすると、それが動作します:

この場合
private void OnNextClicked(object sender, RoutedEventArgs e) 
{ 
    oSlideShowView.Application.SlideShowWindows[1].Activate(); 
    oSlideShowView.Next(); 
} 
関連する問題