C#PowerPoint VSTO:检查是否有幻灯片在视图中
PowerPoint的互操作库公开了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
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。。。似乎是唯一有前途的房地产银行,我试过了,但没有用。但是,一个月过去了,我真的找到了一个解决方案,我马上就要发布了。我说得太早了。如果对话框窗口窃取焦点,这将不起作用。所以,我不接受我的答案。