word 对象模型 - 单击 FILE 时的活动文档事件
word object model - active document event when clicking on FILE
我正在开发 MS Word 加载项。在较新的 MS Word 版本中,菜单栏中有“文件”选项,它会打开一个界面,您可以在其中 select 打开最近的文档、打开新文档或现有文档。我试图找到一种方法,通过它我可以知道用户何时“离开”他正在编辑的当前文档,单击 Word 的文件菜单。我似乎找不到这样的事件。有办法实现吗?
WindowDeactivate
没有达到这个目的。
我想这样做的原因是,对于我正在编写的自定义拼写检查程序,我以透明(也可以通过点击)形式突出显示错误的单词。因此,当用户在最新版本的 Word 中单击“文件”菜单时,突出显示仍然存在,如屏幕截图所示
TL:DR;当用户单击菜单中的文件选项并且当前文档不可见时,是否有一种方法可以在 MS Word 中进行检测?我正在使用 add-in-express,所以所有相关的词对象模型 API 都可用。
我想知道我该如何解决这个问题,感谢您的帮助。
编辑:截图
Word 将触发 Application.DocumentOpen
事件 - 您可以在 OfficeSpy 中看到它(我是它的作者 - 单击“应用程序”按钮,转到“事件”选项卡,查看底部的日志window).
是的,当单击“文件”菜单(显示 Backstage 视图)和单击视图的 return 箭头以删除 Backstage 视图并显示文档时,您都可以检测并执行代码。为此,请在 VSTO 项目中通过自定义 XML 功能区使用 onShow
和 onHide
属性进行回调(这不适用于使用 Visual Designer 制作的功能区)。
可在此处找到参考 material:
Performing Actions When the Backstage View is First Displayed or Hidden
由于本文使用 VBA 来扩展所涉及的概念,我构建了一个示例项目来演示 onShow
如何使用 C# 和 Word 2016 工作(该文档是为 Office 2010 编写的,但是 onShow
和 onHide
将在更高版本的 Word 中工作。
解决方案树
自定义XML功能区(BackstageRibbon.xml)
请注意,<backstage>
节点(激活回调的 onShow
属性)在 XML 中的 <ribbon>
节点之后。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="Ribbon_Load">
<ribbon>
<!--Ribbon XML goes here-->
</ribbon>
<backstage onShow="onShow">
</backstage>
</customUI>
色带代码 (BackstageRibbon.cs)
这些代码中有一部分是样板文件,但是 public void onShow
是根据功能区自定义 XML 中的 onShow
属性执行代码的回调。此外,public string GetCustomUI
是告诉 C# 查找 XML.
的位置
namespace Backstage_Events
{
[ComVisible(true)]
public class BackstageRibbon : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
public BackstageRibbon()
{
}
#region IRibbonExtensibility Members
public string GetCustomUI(string ribbonID)
{
return GetResourceText("Backstage_Events.BackstageRibbon.xml");
}
#endregion
#region Ribbon Callbacks
//Create callback methods here. For more information about adding callback methods, visit https://go.microsoft.com/fwlink/?LinkID=271226
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
}
public void onShow(object contextObject)
{
//Code to be executed before Backstage View displays goes here
MessageBox.Show("Backstage Display Event Triggered!");
}
#endregion
Helpers //Region
}
}
ThisAddin.cs
您还需要添加:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new BackstageRibbon();
}
在 ThisAddIn_Startup
和 ThisAddIn_Shutdown
私有空隙之后 ThisAddin.cs
class 来实例化自定义功能区。
我正在开发 MS Word 加载项。在较新的 MS Word 版本中,菜单栏中有“文件”选项,它会打开一个界面,您可以在其中 select 打开最近的文档、打开新文档或现有文档。我试图找到一种方法,通过它我可以知道用户何时“离开”他正在编辑的当前文档,单击 Word 的文件菜单。我似乎找不到这样的事件。有办法实现吗?
WindowDeactivate
没有达到这个目的。
我想这样做的原因是,对于我正在编写的自定义拼写检查程序,我以透明(也可以通过点击)形式突出显示错误的单词。因此,当用户在最新版本的 Word 中单击“文件”菜单时,突出显示仍然存在,如屏幕截图所示
TL:DR;当用户单击菜单中的文件选项并且当前文档不可见时,是否有一种方法可以在 MS Word 中进行检测?我正在使用 add-in-express,所以所有相关的词对象模型 API 都可用。
我想知道我该如何解决这个问题,感谢您的帮助。
编辑:截图
Word 将触发 Application.DocumentOpen
事件 - 您可以在 OfficeSpy 中看到它(我是它的作者 - 单击“应用程序”按钮,转到“事件”选项卡,查看底部的日志window).
是的,当单击“文件”菜单(显示 Backstage 视图)和单击视图的 return 箭头以删除 Backstage 视图并显示文档时,您都可以检测并执行代码。为此,请在 VSTO 项目中通过自定义 XML 功能区使用 onShow
和 onHide
属性进行回调(这不适用于使用 Visual Designer 制作的功能区)。
可在此处找到参考 material:
Performing Actions When the Backstage View is First Displayed or Hidden
由于本文使用 VBA 来扩展所涉及的概念,我构建了一个示例项目来演示 onShow
如何使用 C# 和 Word 2016 工作(该文档是为 Office 2010 编写的,但是 onShow
和 onHide
将在更高版本的 Word 中工作。
解决方案树
自定义XML功能区(BackstageRibbon.xml)
请注意,<backstage>
节点(激活回调的 onShow
属性)在 XML 中的 <ribbon>
节点之后。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="Ribbon_Load">
<ribbon>
<!--Ribbon XML goes here-->
</ribbon>
<backstage onShow="onShow">
</backstage>
</customUI>
色带代码 (BackstageRibbon.cs)
这些代码中有一部分是样板文件,但是 public void onShow
是根据功能区自定义 XML 中的 onShow
属性执行代码的回调。此外,public string GetCustomUI
是告诉 C# 查找 XML.
namespace Backstage_Events
{
[ComVisible(true)]
public class BackstageRibbon : Office.IRibbonExtensibility
{
private Office.IRibbonUI ribbon;
public BackstageRibbon()
{
}
#region IRibbonExtensibility Members
public string GetCustomUI(string ribbonID)
{
return GetResourceText("Backstage_Events.BackstageRibbon.xml");
}
#endregion
#region Ribbon Callbacks
//Create callback methods here. For more information about adding callback methods, visit https://go.microsoft.com/fwlink/?LinkID=271226
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
}
public void onShow(object contextObject)
{
//Code to be executed before Backstage View displays goes here
MessageBox.Show("Backstage Display Event Triggered!");
}
#endregion
Helpers //Region
}
}
ThisAddin.cs
您还需要添加:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new BackstageRibbon();
}
在 ThisAddIn_Startup
和 ThisAddIn_Shutdown
私有空隙之后 ThisAddin.cs
class 来实例化自定义功能区。