vsto - 无法以编程方式启用功能区按钮

标签 vsto excel-addins ribbon-control

我为 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/

相关文章:

vba - 从 VSTO PowerPoint 功能区调用 VBA AddIn 宏

c# - 获取 Excel 行范围的最快方法

excel - XLL UDF 的已迁移 Excel 加载项调用收到 HRESULT 错误而不是错误

Wix 工具集 : cannot add Excel Add-in project reference

c# - 哪种技术最适合开发 MS Excel 的 Add-In

c# - 如何在 Outlook 中为自定义按钮添加图像图标

outlook-addin - Outlook 插件 : "Tell me more" text in Ribbon item hover

c# - 临时为选定范围着色边框

c# - 如何以编程方式确定从主页功能区创建的 Outlook 新项目 --> 新项目

c# - 构建基于 WPF Ribbon 的应用程序的步骤