【问题标题】:C# Outlook Addin - Context Menu DisposalC# Outlook 插件 - 上下文菜单处理
【发布时间】:2011-11-12 12:22:45
【问题描述】:

当您在 Outlook 中右键单击电子邮件时,我们会设置一个自定义上下文菜单,如下所示:

        private void _application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Interop.Selection Selection)
        {
                var contextButton = (Office.CommandBarButton)CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, Temporary: true);
                contextButton.Visible = true;
                contextButton.Caption = "&My Context Menu";
                contextButton.Click += MyContextMenu_Click;
        }

此方法订阅Application.ItemContextMenuDisplay

它工作正常,只是偶尔我们的事件会被多次触发。当您快速右键单击不同的电子邮件时会发生这种情况。

然后我想知道,什么时候是清理我的临时上下文菜单项的好地方?我需要在某处取消订阅 C# 事件。这样做的预期地点在哪里? (我也认为我们可能需要致电Marshal.ReleaseComObject

我们在 Visual Studio 中使用 VSTO 和 Outlook 2010 项目模板。一般来说,我没有找到很多自定义上下文菜单的好例子。

【问题讨论】:

    标签: c# .net vsto outlook-addin


    【解决方案1】:

    这种古怪可能是为什么在 Outlook 2010 中,Microsoft 更倾向于 Ribbon XML context menu customizations 以支持 Outlook 2007 风格的 CommandBars。见related SO post

    至于清理CommandBars 使用的资源,您需要附加到Application.ContextMenuClose 事件以释放资源并取消订阅您的侦听器。见related SO post on disposing Outlook Context Menus

    您应该重构代码以利用更新的 Ribbon XML 接口来避免 CommandBars

    【讨论】:

    • 我们发现这个事件没有像预期的那样被触发(我认为是因为它是列表中的联系人或电子邮件上的菜单)。我不再处理这个问题了——我们最终清理了ItemContextMenuDisplay 开头的旧菜单。这对我们很有用。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2023-02-10
    • 2015-04-15
    相关资源
    最近更新 更多