簡體   English   中英

C#PowerPoint VSTO:檢查是否有任何幻燈片在視圖中

[英]C# PowerPoint VSTO: Check if Any Slide is in View

PowerPoint的互操作庫公開Globals.ThisAddIn.Application.ActiveWindow.View.Slide ,可讓您測試當前是否在視圖中選擇了幻燈片(任何幻燈片或母版)。

如果視圖中當前沒有幻燈片,則View屬性為null 但是,這有一個轉折點:您無法在沒有引發異常的情況下檢查ActiveWindow.View是否為null。

我的問題是這樣的:

您如何檢查當前是否選擇了幻燈片/母版,而不采用如下所示的難看的try / catch?

    internal static bool SlideActive => Slide != null;

    internal static dynamic Slide
    {
        get
        {
            try
            {
                return Globals.ThisAddIn.Application.ActiveWindow.View.Slide;
            }
            catch
            {
                return null;
            }
        }
    }

編輯:

如果沒有人訪問Slide這是拋出異常:

{System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> 
System.Runtime.InteropServices.COMException: View.Slide : Invalid request.  No slide is currently in view.

我找到了解決此問題的解決方案,其中涉及檢查ActiveWindowPaneActive屬性。

返回活動Slide / Masternull可能如下所示-無需try / catch

    internal static dynamic CurrentSlide
    {
        get
        {
            if (Globals.ThisAddIn.Application.Active == MsoTriState.msoTrue &&
                Globals.ThisAddIn.Application.ActiveWindow.Panes[2].Active == MsoTriState.msoTrue)
            {
                return Globals.ThisAddIn.Application.ActiveWindow.View.Slide;
            }
            return null;
        }
    }

首先,我們需要檢查應用程序是否處於活動狀態,然后檢查縮略圖窗格的相應Pane是否處於活動狀態(以考慮取消選擇所有幻燈片/母版的用戶),最后返回對象或null。

對這個人的支持使我進入了正確的軌道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM