2011-11-29 83 views
1

這裏通話結束後,Ribbon界面是我的情景:刷新從宏觀的Excel表

  • 我有,我在一個VSTO項目已經導入宏老的Excel項目。
  • 我設計了一個自定義功能區(startFromScratch = true),使它看起來像一個獨裁者應用程序。
  • 我還是想用現有的宏代碼,因爲它會花費太多時間在C#代碼轉換所有VBA代碼
  • 我有一個標有[ComVisible(true)]屬性,以便我可以調用從VSTO方法的類vba代碼。

問題是我無法隱藏選項卡,我無法獲取功能區刷新。我可以更改其他控件的狀態(例如,爲CheckBox設置選中狀態),但我無法隱藏或禁用我的自定義選項卡。

我已經試過PerformLayout()PerformDynamicLayout()在功能區,ribbon.RibbonUI.Invalidate(),但沒有任何工程,標籤永遠不會改變的狀態,雖然在代碼中,我設置其Visible屬性爲false

爲了在運行時刷新功能區,我需要做些什麼?


編輯:

我只是出口色帶XML嘗試同樣的事情和Invalidate()方法按預期工作。有沒有什麼辦法可以用可視化編輯器設計的功能區來實現這一點?

+0

你可以發佈一些代碼,顯示如何設置選項卡的'可見'屬性爲'false'? –

+0

好吧,該選項卡是一個RibbonTab控件,所以我只是將其Visible屬性設置爲false(myTab.Visible = false)。設置它沒有問題,如果我正在調試,我可以看到該屬性設置爲false,問題是功能區本身不會刷新。 如果我使用xml功能區,我可以調用它的Invalidate()方法,但是對於功能區設計器沒有這種方法。 – Adrian

回答

1

當我將功能區的StartFromScratch屬性設置爲True時,我複製了您的問題,但當它設置爲False時,它會消失。這是confirmed by MSDN

如果此屬性設置爲true,則無法在運行時更改自定義選項卡的可見性。

作爲一種解決方法,設置StartFromScratchFalse,加在每個默認選項卡一個選項卡,設置每個的ControlIdTypeOffice,並且每個爲各自的默認名稱(TabHomeTabFormulas等)的OfficeId,然後將這些內置選項卡的每個可見性設置爲False。 (MSDN has made available a full list of control IDs爲他們的Office應用程序,以便於參考。)

+0

該死的,我錯過了StartFromScratch MSDN文章中的備註部分:) 非常感謝您的解決方案。 – Adrian