gpt4 book ai didi

c# - 在 Excel 2013 中动态禁用/启用自定义上下文菜单

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:24 24 4
gpt4 key购买 nike

我有一个 Excel 加载项。我在单元格的上下文菜单中添加了 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;
}
}

最佳答案

您报告行为的原因:

您报告的行为是由于 bug MS Excel 2013 核心。

行为不是由于用于创建 Excel 加载项 的库/工具包造成的:

  • 我遇到了与 VSTO 2010 相同的问题当您报告 ExcelDNA 的问题时和 NetOffice
  • 在这两种情况下,启用上下文菜单项在 Office 2010 中运行良好,在 Office 2013 中停止运行。

我已在 MS Connect 上提交了 Visual Studio.NET Framework 区域的缺陷因为我还没有找到他们接受 Office 错误的地方。

MS Connect 上,有时指向缺陷的链接似乎已损坏 - 我将在该答案的末尾添加带有屏幕截图的缺陷详细信息。

解决方法 - 启用禁用菜单项

正如在对 your question on MSDN Social 的回答中所述论坛 - 当您通过 CaptionTag 属性检索项目时,您可以控制上下文菜单项的 Enabled 状态:

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
}
}

在上面的代码中,context menu itemCaption 找到 - 通过 Tag 找到项目替换代码:

    control.Caption == "item caption"

if 条件下:

    control.Tag == "item tag"

指定正确的值而不是项目标签文本

缺陷详情

MS Connect ticketID 813453 和标题:

Enabled state does not change for context menu items of Excel 2013 add-in created with C# .NET and Visual Studio 2012

工单截图如下: 813453 Page 1 813453 Page 2 813453 Page 3 813453 Page 4

关于c# - 在 Excel 2013 中动态禁用/启用自定义上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058674/

24 4 0