Outlook上下文菜单项单击触发多次
本文关键字:单击 上下文 菜单项 Outlook | 更新日期: 2023-09-27 18:24:34
这里已经有人问过这个问题,但我只是对给出的答案不满意。
我当前正在向Outlook添加自定义上下文菜单。代码如下:
void Application_ItemContextMenuDisplay(Microsoft.Office.Core.CommandBar CommandBar, Microsoft.Office.Interop.Outlook.Selection Selection)
{
if (Online)
{
foreach (string category in FilingRuleManager.FilingRuleCategories)
{
Office.CommandBarPopup cb = CommandBar.Controls.Add(Office.MsoControlType.msoControlPopup, missing, missing, missing, true) as Office.CommandBarPopup;
cb.BeginGroup = true;
cb.Visible = true;
cb.Tag = MENUNAME;
cb.Caption = category;
//now add the filing rules as a sub menu
foreach (FilingRuleDB rule in FilingRuleManager.FilingRules.Values)
{
if (rule.RuleCategory == category)
{
Office.CommandBarButton cbSub = cb.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing, true) as Office.CommandBarButton;
_FilingRules.Add(cbSub);
cbSub.Visible = true;
cbSub.Caption = rule.RuleName;
cbSub.Tag = rule.FilingRuleID.ToString();
cbSub.Click += new Office._CommandBarButtonEvents_ClickEventHandler(FilingRules_Click);
}
}
}
}
}
当我运行应用程序时,每次我在Outlook中显示上下文菜单时,Click处理程序(FilingRules_Click)都会被触发那么多次。因此,如果我右键单击3次,处理程序将执行3次,依此类推
一定有比上面链接的问题中的破解更好的方法来实现这一点。
我试过:
- 在添加CommandBarButtons之前删除它们-但是它们不存在!!因为每次隐藏Outlook上下文菜单时,自定义项目都会自动删除
- 将控件存储在列表中,然后尝试删除处理程序-这会产生AV,因为菜单隐藏后按钮不再存在
- 没有ItemContextMenuHidden()事件可供我挂钩,否则我会尝试的
- 在外接程序启动时添加项(即,在没有ItemContextMenuDisplay()处理程序的情况下只添加一次),但是,由于显示菜单时总是清除这些项,因此这些项永远不会出现
有人有其他建议吗?
解决了问题。
- 将命令按钮定义为类级静态变量
-
CCD_ 2的附件事件CCD_。
outlookInstance.ContextMenuClose += new ApplicationEvents_11_ContextMenuCloseEventHandler(outlookInstance_ContextMenuClose);
-
将该方法实现为代码
void outlookInstance_ContextMenuClose(OlContextMenu ContextMenu) { if (ContextMenu == OlContextMenu.olItemContextMenu) { ContextIndexButton.Click -= new _CommandBarButtonEvents_ClickEventHandler(<your method>); ContextIndexButton = null; } }