首页 > 解决方案 > Word VSTO 加载项

问题描述

我正在为 Microsoft Office Word 开发加载项,但遇到了不寻常的情况。在我的加载项中,当用户右键单击表格单元格时,我想添加更多选项。我写了一个小函数来处理我的加载项按钮的创建/搜索:

    private Office.CommandBarButton AppendBarButton(Office.CommandBar cmdBar, string tag, string caption, int? faceid = null, bool begingroup = false)
    {
        if (cmdBar == null) throw new ArgumentNullException("Command bar argument cannot be null.");
        if (string.IsNullOrWhiteSpace(tag)) throw new ArgumentException("Invalid tag.");
        if (string.IsNullOrWhiteSpace(caption)) throw new ArgumentException("Invalid caption.");

        Office.CommandBarButton btn = cmdBar.Controls.OfType<Office.CommandBarButton>().FirstOrDefault(ctrl => ctrl.Tag == tag);
        if (btn == null) btn = (Office.CommandBarButton)cmdBar.Controls.Add(Office.MsoControlType.msoControlButton, Type.Missing, Type.Missing, Type.Missing, true);
        if (btn == null) throw new ApplicationException("Could not create the command bar button.");

        btn.Tag = tag;

        if (faceid != null)
        {
            btn.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
            btn.BuiltInFace = true;
            btn.FaceId = (int)faceid;
        }
        else btn.Style = Office.MsoButtonStyle.msoButtonCaption;

        btn.Caption = caption;
        btn.BeginGroup = begingroup;

        return btn;
    }

现在,从功能区负载处理程序,我做这样的事情:

    var tableCellsBar = Globals.ThisAddIn.Application.CommandBars["Table Cells"];
    var someBtn = AppendBarButton(tableCellsBar, "HardCodedTag", "SomeCaption", 989);
    someBtn.Click += SomeBtnClickHandler; // [!!!]

现在这是奇怪的部分。这工作得很好。我在我的开发笔记本电脑上测试它,它工作得很好。我将它部署在我的另一台笔记本电脑上(通过发布,然后将其安装在笔记本电脑上),它可以正常工作,又好了。但是,在我客户的两台笔记本电脑上,我以与另一台笔记本电脑相同的方式部署它,但它似乎不起作用。所有 4 台笔记本电脑都安装了 Office 2016。加载项中的其他所有内容都有效,除了这个东西。

我不能确定问题出在这部分代码的某个地方,但这就是问题所在。我几乎在代码周围都有尝试/捕获和记录。SomeBtnClickHandler除了(标有[!!!])之外,所有笔记本电脑上的所有日志都与它应有的完全一样。似乎当我按下客户端笔记本电脑上的按钮时,处理程序根本没有被调用(是的,这似乎确实是问题,因为在我的两台笔记本电脑上,该处理程序的功能发生了,我可以看到更改 - 就像它真的被调用了,但是在我客户的笔记本电脑上,绝对没有发生任何事情,既不是文档中的预期更改,也不是日志)。我至少期待如果AppendBarButton()函数不能正常工作,[!!!] 行会抛出某种异常,甚至可能是 NRE。

我对这个 VSTO 还很陌生,所以我可能会忽略一些简单的事情。

标签: c#ms-wordvsto

解决方案


推荐阅读