我为 Excel 开发了一个 VSTO 4 加载项。它工作得很好,但是,我在其功能区控件的自定义选项卡中放置了一个按钮,该按钮最初被禁用。
单击自定义选项卡中的其他功能区按钮后,我需要启用最初禁用的按钮。
我尝试过:
btnCancelar.Visible = true;
在按钮的Click事件中,但按钮不显示。奇怪的是,调试时,它仍然不出现,但如果显示 MessageBox,按钮最后就可见了。
我不明白这种行为。如何通过代码动态启用或禁用功能区按钮?
最佳答案
我不确定您的项目中使用什么语言,但我想您可以将其转换为您自己使用的语言。我将在此处用 C# 展示示例:
首先,您需要在 RibbonXML 定义中实现所谓的回调函数:
<button id="buttonSomething" label="Content" size="large" getVisible="EnableControl"/>
那么下一步就是实现Callback函数了:
public bool EnableControl(IRibbonControl control)
{
return true; // visible ... false = invisible
}
VSTO 将触发 getVisible 回调,并根据返回值启用或禁用可见状态(不要忘记从 RibbonXML 中删除任何 Visible 属性,否则不会触发回调)
如果使用功能区设计器,您需要确保您的单击签名正确,最简单的方法是双击功能区设计器上的按钮。这将为您创建 Click 方法,例如:
我使用功能区设计器创建了一个功能区并添加了两个按钮。双击第一个按钮以获取如下所示的空方法,并添加代码。
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
}
这对我来说非常有效,所以如果它对您不起作用,请提供您的编码的更多详细信息。
关于vsto - 无法以编程方式启用功能区按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45360778/