VSTO:OfficeRibbon.Contextがヌルになるのはなぜですか?
質問
最初のWord 2007アドインを開発し、OfficeRibbonをプロジェクトに追加しました。ボタンクリックハンドラーでは、現在の Word.Document
または Word.Application
のいずれかへの参照が必要です。
OfficeRibbon.Context
プロパティを介して参照を取得しようとしています。このプロパティでは、現在の Application
オブジェクトを参照する必要があります。ただし、常に null
です。
誰でもどちらかを知っていますか
a) OfficeRibbon.Context
が正しく表示されるようにするために何かする必要がある場合は、
b)他の方法があれば、WordアプリケーションまたはアクティブなWord文書への参照を取得できますか?
注:
-
VS2008 SP1を使用しています
-
リボンは初期化されたように見えます。コンストラクターとOnLoadメンバーの両方でデバッガーをステップ実行できます。ボタンクリックハンドラーは正しく実行されます。
-
こちらはこのプロパティのオンラインヘルプ;
OfficeRibbon.Contextプロパティ
C#
public Object Context {get;内部セット; }
このOfficeRibbonオブジェクトに関連付けられているインスペクターウィンドウまたはアプリケーションインスタンスを表すオブジェクト。
備考
Outlookでは、このプロパティは、このOfficeRibbonが表示されるインスペクターウィンドウを指します。
Excel、Word、およびPowerPointでは、このプロパティは、このOfficeRibbonが表示されるアプリケーションインスタンスを返します。
解決
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);
}
...
}
他のヒント
入手方法:
Globals.ThisAddIn.Application
Office 2007の単語オブジェクトモデルの変更についてはあまり知りませんが、VBAの知識を使用した説明はこちらです。
アプリケーションは、グローバルに利用可能なオブジェクトです。 また、Application.ActiveDocumentは、現在のドキュメントへのハンドルを取得する必要があります。
推測:リボンをどのように追加しようとしていますか?