我正在尝试为WindowSelectionChanged
事件注册处理程序。它可以工作,但在退出Outlook时,它将放弃对NormalEmail.dotm
文件的任何更改。
例如,对快速部件库(插入 - >文字 - > QuickParts)的任何更改只会在当前会话期间显示; 关闭Outlook并重新开始将显示上一个元素列表,即使它们已被删除,或者已添加新元素。
删除文件:
C:\ Users [USER] \ AppData \ Roaming \ Microsoft \ Templates \ NormalEmail.dotm
应该提示Outlook创建一个新的,但是在启用Addin时不会发生这种情况。
这可以通过向WindowSelectionChange
事件注册一个空方法来重现:
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.Inspectors.NewInspector += new Outlook.InspectorsEvents_NewInspectorEventHandler(RegisterChangeHandler);
}
void RegisterChangeHandler(Outlook.Inspector inspector)
{
Microsoft.Office.Interop.Word.Application app = Application.ActiveExplorer().ActiveInlineResponseWordEditor?.Application;
--> app.WindowSelectionChange += WinSelectionChange; <-- this line causes the bug
}
private void WinSelectionChange(Selection Sel)
{
/* nothing */
}
...
}
这不会导致例外;将try / catch块放在适当的位置,或者在Application.Quit
事件中取消注册回调时,结果是一样的。
问题:如何使Outlook能够提交NormalEmail.dotm
文件,同时还可以为WindowSelectionChange
事件注册回调?
(项目类型为“2013和2016 VSTO Addin”)