【问题标题】:Handle message window close event处理消息窗口关闭事件
【发布时间】:2017-07-14 00:22:44
【问题描述】:

我不断看到应该注册 Inspector 窗口关闭事件的代码的不同变体,但我不知道将代码放在哪里。它应该在插件启动函数(ThisAddIn_Startup)中,在项目单击事件处理程序中还是在其他地方?以及如何正确注销处理程序,如果它是例如。为每个邮件项目注册?

这是我找到的一些示例代码(我不确定放在哪里):

InspectorEvents_10_Event inspectorEvent = selectedItem[1].GetInspector();
inspectorEvent.Close += ItemClosed;

本教程还说有两种类型的关闭,即使我可能需要处理 https://sites.google.com/site/xushengxiaotech/Home/http---sites-google-com-site-xushengxiaoshome-home-handling-the-close-event-correctly-using-outlook-object-model

我在哪里注册这些处理程序?

【问题讨论】:

    标签: c# vsto outlook-addin


    【解决方案1】:

    您需要跟踪 Inspectors.NewInspector 事件(在启动时设置事件处理程序)。然后当 NewInspector 触发时,为新检查器上的 Inspector.Close 事件设置事件处理程序。

    【讨论】:

    • 好的,我已经为 NewInspector 创建了一个事件处理程序,并在里面添加了以下行:inspector.Close += OnInspectorClose; 但它强调了 inspector.Close 表达式并说它不能分配给 Close 因为它是一个方法组。
    • 我已经将检查器实例转换为事件类,它似乎可以工作:var inspectorEvent = inspector as InspectorEvents_10_Event;(然后将处理程序注册到检查器事件inspectorEvent.Close += OnInspectorClose;)。但是我现在如何正确取消注册呢?
    • 创建一个以 Inspector 作为其成员之一并处理 Inspector.Close 事件的包装类。在 NewInspector 事件处理程序中,创建该类的新实例并将其添加到存储在插件类级别上的列表中。当包装类处理 Inspector.Close 事件时,它将取消注册事件处理程序并将自己从父插件类存储的包装器列表中删除。
    • 嗯,好的,如果我想阻止“你想保存消息中的更改”对话框,我应该注册什么事件? Inspector.Close 仅​​在此之后触发。
    • 您需要自己保存邮件 (MailItem.Save) 或在用户使用 MailItem.Close(olDiscard) 之前关闭邮件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多