c# - 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 还很陌生,所以我可能会忽略一些简单的事情。
解决方案
推荐阅读
- paperjs - 从 paper.js 站点复制粘贴的代码到 codepen 不再工作
- android - 如何在android studio中递归生成颜色代码使用层次结构?
- spring-boot - 如何为 JPA Respository 扩展接口创建 bean(在多个模块中工作)
- rust - Rust 无法识别借用在循环结束时结束
- firebase - 从现有的云功能 Flutter 项目开始
- c# - BlockingCollection 中的多个消费者是否同时处理?
- javascript - Vue.js 在console.log 中看不到数据
- matplotlib - Jupyter notebook 中的交互式 matplotlib 与远程服务器上的 shell 命令“!python filename.py” ssh -i 访问
- sql - 在sql中分组后获取总百分比拆分
- mysql - 如果找不到数据,Mysql会添加临时列