C#PowerPoint VSTO:检查是否有幻灯片在视图中

C#PowerPoint VSTO:检查是否有幻灯片在视图中,c#,vba,vsto,powerpoint,office-interop,C#,Vba,Vsto,Powerpoint,Office Interop,PowerPoint的互操作库公开了Globals.ThisAddIn.Application.ActiveWindow.View.Slide,允许您测试当前是否选择了幻灯片(任何幻灯片或母版)以及是否在视图中 如果视图中当前没有幻灯片,则view属性为null。但问题是:如果不引发异常,就无法检查ActiveWindow.View是否为null 我的问题是: 您如何检查幻灯片/母版当前是否已选中,而不必像下面这样使用难看的try/catch internal static bool S

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;
            }
        }
    }
编辑: 这是访问
幻灯片时引发的异常,如果视图中没有:

{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.

我找到了这个问题的解决方案,其中包括检查
ActiveWindow
窗格
Active
属性

返回活动的
幻灯片
/
主幻灯片
空幻灯片
的方法可能如下所示-无
尝试
/
捕获
所需:

    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;
        }
    }
首先,我们需要检查应用程序是否处于活动状态,然后检查缩略图窗格对应的
窗格
是否处于活动状态(以说明用户取消选择了所有幻灯片/母版),最后返回我们的对象或空值


道具让我走上了正确的轨道。

查看ActiveWindow.View.ViewType。。。似乎是唯一有前途的房地产银行,我试过了,但没有用。但是,一个月过去了,我真的找到了一个解决方案,我马上就要发布了。我说得太早了。如果对话框窗口窃取焦点,这将不起作用。所以,我不接受我的答案。