我不确定你的项目中使用了什么语言,但我想你可以将它转换为你自己使用的语言。我会在这里显示的例子在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