我不確定你的項目中使用了什麼語言,但我想你可以將它轉換爲你自己使用的語言。我會在這裏顯示的例子在C#:
首先,你需要實現在RibbonXML定義所謂的回調函數:
<button id="buttonSomething" label="Content" size="large" getVisible="EnableControl"/>
那麼下一步就是實現回調函數:
public bool EnableControl(IRibbonControl control)
{
return true; // visible ... false = invisible
}
VSTO將觸發getVisible回調,並根據返回值啓用或禁用可見狀態(不要忘記從RibbonXML中刪除任何可見屬性,否則回調不會被觸發)
如果功能區設計器需要確保您的點擊簽名是正確的,那麼簡單的方法是雙擊功能區設計器上的按鈕。這將爲您創建Click方法,例如:
我使用Ribbon設計器創建了一個Ribbon並添加了兩個按鈕。雙擊第一個按鈕以獲得如下所示的空方法,並添加代碼。
private void button1_Click(object sender, RibbonControlEventArgs e)
{
// Toggle button visibility and make sure the button is enabled
// Visible (obviously) makes it visible, while Enabled is grayed if
// false. You don't need this it is Enabled by default, so just for
// demo purposes
button2.Visible = !button2.Visible;
button2.Enabled = button2.Visible;
// Force Ribbon Invalidate ...
this.RibbonUI.Invalidate();
// Long running proces
}
這對我很好,所以如果它不適合你,請提供你的編碼的更多細節。
你好...我使用C#,以及...但是,我找不到在哪裏添加回調。我沒有RibbonXML ....我用絲帶設計師。我該如何添加回調? – jstuardo
使用Ribbon設計器(稍微不靈活但適用於大多數解決方案)更容易,除非您爲方法創建了正確的「簽名」。看到我編輯的答案 –
當然,它適合你。如果我使用你的代碼,它也可以工作。問題是這樣的:在使按鈕可見之後,我開始了一個長時間運行的過程。該過程用數據填充新工作表。我希望用戶能夠取消該過程......這就是爲什麼我需要在過程開始之前顯示取消按鈕的原因。但即使當我使用Application.DoEvents,button.Invalidate和更多的嘗試,當返回當前方法時,最終顯示按鈕。奇怪的是,Excel在處理過程中沒有被鎖定,因爲我可以看到行是如何填充的。 – jstuardo