2011-01-06 104 views
3

對於VSTO工作簿項目,是否有從ThisWorkbook類中檢索Ribbon對象的引用的最佳做法?什麼是檢索對象對象的引用的「正確」方法?

以下是我在做的事:在我的Ribbon類中,我創建了一個名爲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 – 2011-01-08 06:47:17

回答

2

一個簡單得多的方法是在某處創建一個全局靜態變量(例如在ThisWorkbook中)。

public static Ribbon ribbonref; 
在功能區類的代碼

然後,在初始化事件的事件處理程序(我認爲方法被稱爲Ribbon1_StartUp(),但我不知道),設置變量:

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

(從內存中寫入,因此可能不完全正確)

然後,您可以使用ribbonref訪問您的功能區實例。

+0

Ahhhh,我更喜歡你的解決方案!非常感謝您的建議! – 2011-01-29 14:38:32

0

請參閱此MSDN網頁,其中顯示了使用全局對象:

Globals.Ribbons.MyRibbon.MyObject.Text = "test"; 
相關問題