1
这已经被问到here,但我只是不满意给出的答案。Outlook上下文菜单项点击发射多次
我正在向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中的上下文菜单中单击处理器(FilingRules_Click)被解雇,很多次。所以,如果我右键单击3次,处理程序执行3次,依此类推。
在上面链接的问题中,必须有更好的方法来达到这个目的。
我曾尝试:
- 只是增加他们之前卸下CommandBarButtons - 但他们不存在!每当Outlook上下文菜单被隐藏时,自动删除自定义项目。
- 将控件存储在列表中,然后尝试删除处理程序 - 这会给出一个AV,因为隐藏菜单后按钮不再存在。
- 没有ItemContextMenuHidden()事件让我挂钩否则我会尝试。
- 当插件开始时添加项目(即只有一次没有ItemContextMenuDisplay()处理程序),但是项目从不出现,因为它们总是在显示菜单时被清除。
有没有人有另一个建议?
有趣,我会尝试这是我的结束。谢谢 – Simon 2012-03-30 06:35:35