我有一个Excel AddIn。我在单元格的上下文菜单中添加了2个上下文菜单项。
右键单击一个单元格时,根据单元格的公式,将禁用一个上下文菜单项。
我在sheetSelectionChangeEvent
这在Excel 2003,2007和2010中运行良好,但在Excel 2013中不起作用。
以下是代码:
private void ApplicationSheetSelectionChange(COMObject sh, Range target)
{
DisableMenubarsButtonsWRibbon(XLApp.Selection as Range);
}
public void DisableMenubarsButtonsWRibbon(Range rng)
{
var formula = rng.Formula as string;
if(formula is function1)
{
_contextMenuItem1.Enabled = true;
_contextMenuItem2.Enabled = false;
}
else if(formula is function2)
{
_contextMenuItem1.Enabled = false;
_contextMenuItem2.Enabled = true;
}
else
{
_contextMenuItem1.Enabled = true;
_contextMenuItem2.Enabled = true;
}
}
答案 0 :(得分:1)
您报告的行为归因于MS Excel 2013核心的bug。
行为不是由于用于创建 Excel加载项的libriaries / toolskits所致:
我已经在MS Connect上提交了 Visual Studio 和 .NET Framework 区域的缺陷,因为我还没有找到他们接受 Office错误的位置
与 MS Connect 一样,有时会出现缺陷链接 - 我将在此答案的最后添加屏幕截图的详细信息。
正如在your question on MSDN Social论坛的回答中所述 - 当您按Enabled
或Caption
属性检索项目时,您可以控制Tag
上下文菜单项的状态:< / p>
CommandBar contextMenu = Globals.ThisAddIn.Application.CommandBars["Cell"];
foreach (CommandBarControl control in contextMenu.Controls)
{
if (control.Caption == "item caption") // Specify here caption of your context menu item
{
contextMenuItem = (CommandBarButton)control;
contextMenuItem.Enabled = true; // Specify here desired value for Enabled state to be set
}
}
在上面的代码中,Caption
找到了剪切上下文菜单项 - 通过Tag
替换代码找到项目:
control.Caption == "item caption"
在if
条件中:
control.Tag == "item tag"
指定正确的值而不是item tag
文本
MS Connect ticket有 ID 813453和标题:
对于使用C#.NET和Visual Studio 2012创建的Excel 2013加载项的上下文菜单项,启用状态不会更改
以下是门票的截图: