2011-01-06 16 views
3

VSTOワークブックプロジェクトの場合、ThisWorkbookクラスからリボンオブジェクトへの参照を取得するのがベストプラクティスですか?リボンオブジェクトへの参照を取得する「適切な」方法は何ですか?

私のやっていることは次のとおりです。私のリボンクラスでは、InvalidateControl(string controlID)というパブリックメソッドを作成しました。特定のブックレベルのイベントが発生したときに基づいてThisWorkbookクラスからそのメソッドを呼び出す必要があります。しかし、私はそのリボンオブジェクトへの参照を「取得」するために見ることができる唯一の方法は...これを行うには少し臭いらしい

// This is all in the ThisWorkbook class 
    Ribbon ribbon; 
    protected override IRibbonExtensibility CreateRibbonExtensibilityObject() 
    { 
     this.ribbon = new Ribbon(); 
     return this.ribbon; 
    } 

...です。つまり、私はCreateRibbonExtensibilityObject()に関係なくオーバーライドする必要があります。私がそれを超えてやっていることは、リボンへのローカル参照を維持することです。しかし、それは正しいとは思わない。 ThisWorkbookクラスでその参照を取得する別の良い方法はありますか?それともこれはかなり受け入れられますか?

ありがとうございます!

+0

をうーん....これは奇妙です:私は誰かがこれを答えていたことを通知しましたが、何もここにありません。誰かがそれに答えてそれを削除しましたか?こんにちは?あなたはそこにいますか? :D –

答えて

2

もっと簡単な方法は、どこかにグローバル静的変数を作成することです(ThisWorkbookなど)。

public static Ribbon ribbonref; 

は次にリボンクラスのコードでは、初期化イベントのイベントハンドラ(私はメソッドがRibbon1_StartUp()と呼ばれていると思いますが、私はよく分からない)で、変数を設定します。

private void Ribbon1_StartUp(object sender, EventArg e) 
{ 
    ThisWorkbook.ribbonref = this; 
} 

(正確には正しくない可能性があります)

ribbonrefを使用して、リボンインスタンスにアクセスできます。

+0

ああ、私はあなたのソリューションがはるかに良いのが好きです!ご意見ありがとうございました! –

0

グローバルオブジェクトの使用方法を示しています。このMSDNページを参照してくださいしてください:

Globals.Ribbons.MyRibbon.MyObject.Text = "test"; 
関連する問題