2008-10-31 102 views
3

我正在开发我的第一个Word 2007插件,并且我已将OfficeRibbon添加到了我的项目中。在一个按钮点击处理程序中,我想引用当前的Word.DocumentWord.ApplicationVSTO:为什么OfficeRibbon.Context为空?

我正试图通过OfficeRibbon.Context属性获取参考,文档中所说的属性应参照当前的Application对象。但是,它始终是null

有谁知道任

一)如果有什么我需要做的,使OfficeRibbon.Context出现填充正确?
b)如果还有其他方法,我可以获得对Word应用程序或活动Word文档的引用?

注:

  • 我使用VS2008 SP1

  • 色带看起来已初始化罚款:色带正确呈现在Word中;我可以通过构造函数和OnLoad成员来调试调试器;按钮单击处理程序正确执行。

  • 这里的the online help for this property;

OfficeRibbon.Context属性

C#
public Object Context { get; internal set; }

表示与此OfficeRibbon对象相关联的检查员窗口或应用程序实例的对象。

备注

在Outlook中,此属性指的是在其上显示此OfficeRibbon检查员窗口。

在Excel,Word和PowerPoint中,此属性返回显示此OfficeRibbon的应用程序实例。

回答

4

我在使用VS2008 SP1创建Excel 2007 AddIn时也遇到了此问题。我使用的解决方法是在internal static属性的应用程序存储在主外接程序类,然后在我的丝带引用它在事件处理程序:

public partial class ThisAddIn 
{ 
    internal static Application Context { get; private set; } 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     Context = Application; 
    } 
    ... 
} 

public partial class MyRibbon : OfficeRibbon 
{ 
    private void button1_Click(object sender, RibbonControlEventArgs e) 
    { 
     DoStuffWithApplication(ThisAddIn.Context); 
    } 
    ... 
} 
1

虽然我不太了解Office 2007单词对象模型的变化,但这里是我使用VBA知识的解释。

应用程序是一个全局可用的对象。 此外,Application.ActiveDocument应该让你处理当前文档。

投机:你是如何尝试添加色带?

2

尝试用引用文档:

Globals.ThisDocument.[some item] 

MSDN Reference

2

得到它:

Globals.ThisAddIn.Application