需求:excel插件开发,动态改变Ribbon功能区控件的显示隐藏问题
开发背景:ExcelDna
参考vba的代码
原文链接:https://blog.csdn.net/lassewang/article/details/8268813
xml文件设计Excel功能区界面
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" loadImage="LoadImage" onLoad="ribbonLoaded">
<!-- 在 [XML]中被定义为 空白(whitespace)字符:空格 ( ) Tab (	) 回车 (
) 换行 (
)-->
<ribbon startFromScratch="false">
<tabs>
<tab id="CustomTab" label="MyDnaTab" insertAfterMso="TabHome">
<group id="MyGroup" label="MenuAndButton">
<button id="TestRunTag" label="Test Run Tag" image="office.png" size="normal" onAction="RunTagMacro" tag="CmdName" />
<editBox id="UserID" label="账号:" image="office.png" tag="CmdUserID" onChange="EditUserId" />
<editBox id="Password" label="密码:" image="office.png" tag="CmdPassword" onChange="EditPassword" />
<separator id="separator2" />
<button id="Login" label="登录" onAction="OnLogin" />
<button id="Exit" label="退出"/>
</group>
<group id="InstitutionGroup" label="InstitutionGroup" getVisible="InstitutionGroup_getVisible">
--<button id="TestButtonAll" label="测试按钮" size="large" onAction="OnTestButton" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
在需要控制的地方写代码
using ExcelDna.Integration;
using ExcelDna.Integration.CustomUI;
namespace TestDemo
{
[ComVisible(true)]
public class RibbonUI : ExcelRibbon
{
private static IRibbonUI customRibbon;
//InstitutionGroup是否隐藏
private bool GroupIsVisible;
/// <summary>
/// ribbon callbock,get IRibbonUI object
/// </summary>
public void ribbonLoaded(IRibbonUI ribbon)
{
GroupIsVisible = true;
customRibbon = ribbon;
}
/// <summary>
/// 点击登录按钮的时候改变显示隐藏的属性
/// </summary>
/// <param name="control"></param>
public void OnLogin(IRibbonControl control)
{
try
{
string userName = Helper.PublicHelper.GetConfigValue("userName");
if (userName == "123")
{
//用户有权限的时候显示
GroupIsVisible = true;
//使所有用户界面上的控件失效并随后刷新 UI。
customRibbon.Invalidate();
}
else
{
GroupIsVisible = false;
customRibbon.Invalidate();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 隐藏控件的回调方法
/// </summary>
/// <param name="control"></param>
/// <returns></returns>
public bool InstitutionGroup_getVisible(IRibbonControl control)
{
return GroupIsVisible;
}
}
}
写InstitutionGroup_getVisible回调方法的时候走了一段弯路,vba中有两个参数,我照样写下来打断点进不去,方法不起效果,所以这里记录下来,方便提醒自己。也希望能帮到大家。