近日,在学习 VSTO 开发时,仿照微软官方 VSTO 开发实例 ➔ 自定义"任务窗格"时,遇到异常,查询网上很久都无解。昨日一次偶然发现了破绽,现将解决方法记录如下:
VSTO Excel 自定义"任务窗格"官网实例代码无效 的解决方案
微软官网 VSTO 开发实例中"向应用程序添加自定义任务窗格"给出两段代码,分别是:
public partial class ThisAddIn
{
private MyUserControl myUserControl1;
private Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;
//启动
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
myUserControl1 = new MyUserControl();
myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1, "My Task Pane");
myCustomTaskPane.Visible = true;
}
}
该实例我分别在两台PC上进行运行,其中一台与官网效果无误,完美实现效果。另一台始终弹不出“任务窗格”,多次检查代码和过程,仍然依旧无效,甚至重建项目重做,仍然无效。甚至设置断点跟踪都看不到 bug,但就是没效果。
几天后,再次进行下一步的学习时,无意中发现了异常,用不是很规范的UML时序图描述为下图:
上图由蓝色粗线将两台PC运行时序分开,上半部是正常效果,下半部是错误效果的时序。
造成影响估计是 Office 其他插件导致的。
解决方法
将代码修改为:
public partial class ThisAddIn
{
private MyUserControl myUserControl1;
private Microsoft.Office.Tools.CustomTaskPane myCustomTaskPane;
int i=0; //避免 CustomTaskPane 被重复 new 。
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
if(i==0)
{
myUserControl1 = new MyUserControl();
myCustomTaskPane = this.CustomTaskPanes.Add(myUserControl1, "My Task Pane");
myCustomTaskPane.Visible = true;
i++;
}
}
}
修改后的代码,在不同 PC 上均可靠运行。