我们在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项目模板。一般来说,我没有找到许多自定义上下文菜单的好例子。
答案 0 :(得分:1)
这种怪癖可能就是为什么在Outlook 2010中,微软正朝着Ribbon XML context menu customizations转向{2007}风格的CommandBars
。见related SO post。
至于清理CommandBars
使用的资源,您需要附加到Application.ContextMenuClose
事件以释放资源并取消订阅您的监听器。见related SO post on disposing Outlook Context Menus。
您应该重构代码以利用较新的Ribbon XML接口来避免CommandBars
。