【问题标题】:Outlook VSTO-AddIn: Prevent Outlook from deleting an appointmentOutlook VSTO-AddIn:防止 Outlook 删除约会
【发布时间】:2020-05-07 04:34:12
【问题描述】:

我试图在某些情况下禁止用户删除约会。像这样的:

  1. 用户点击日历中的约会
  2. 用户选择删除
  3. VSTO-Addin 检查是否允许这样做,如果不允许,则显示警告对话框。 Outlook 不会删除约会!

目前我附加到 Item_Delete_Add() 并且我认为只能处理删除,但您不能阻止 Outlook 实际删除约会。对吗?

【问题讨论】:

    标签: outlook-addin


    【解决方案1】:

    你是在正确的途径...Items.ItemRemove 事件在从指定集合中删除时触发。当个人文件夹文件 (.pst) 中的最后一个项目被删除,或者从 PST 文件、Microsoft Exchange 邮箱或 Exchange 公用文件夹中一次删除 16 个或更多项目时,此事件不会运行。此外,您必须保留对源对象的引用,以了解正在从文件夹中删除的项目。要使其正常工作,您必须订阅 Explorer 类的 SelectionChange 事件。当用户以编程方式或通过与用户界面交互选择不同或附加的 Microsoft Outlook 项目时,将触发它。因此,您可以订阅每个选定的项目并知道确切删除了哪个项目。

    另一种可能的方法是处理在删除项目(它是父对象的实例)之前触发的AppointmentItem.BeforeDelete 事件。被删除项目的实例作为参数传递。为了在通过操作删除电子邮件、分发列表、日记条目、任务、联系人或帖子时触发此事件,必须打开检查器。每次删除项目时都会发生该事件。它还允许通过设置第二个参数来取消操作 - 如果事件过程将此参数设置为true,则操作未完成并且项目不会被删除。

    另一种方法是重新调整功能区控件的用途,请参阅Temporarily Repurpose Commands on the Office Fluent Ribbon 了解更多信息。

    【讨论】:

    • 我认为您捕获 SelectioChange 事件的想法通常是最好的解决方案。据我了解,我需要附加到 ActiveExplorer。现在我的问题是,如果 ActiveExplorer 发生变化或者是由 Outlook 神奇处理的东西,我将如何获得通知。那么当 ActiveExplorer 窗口发生变化时,我是否需要重新附加到事件处理程序?
    • 还有一个问题:当我将事件处理程序附加到 AppointmentItem.BeforeDelete 并且用户更改当前选择时,我是否需要取消注册,否则我会保留一个指向 AppointmentItem 的指针,这是被禁止的:见stackoverflow.com/questions/61437362/…
    • 从你那里找到的 :-) stackoverflow.com/questions/57296917/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多