首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Outlook上下文菜单项多次单击“触发”

Outlook上下文菜单项多次单击“触发”
EN

Stack Overflow用户
提问于 2012-02-14 06:38:46
回答 1查看 1.8K关注 0票数 1

这已经被问到here,但我只是对所给出的答案不满意。

我目前正在向Outlook添加自定义上下文菜单。守则如下:

代码语言:javascript
复制
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次,依此类推。

必须有更好的方法来解决这个问题,而不是上面提到的问题中的黑客。

我试过:

  1. 在添加它们之前移除CommandBarButtons -但是它们不存在!!由于每次隐藏Outlook上下文菜单时,自定义项都会自动在列表中removed.
  2. Storing控件,然后尝试删除处理程序--这会给出一个AV,因为在隐藏菜单之后按钮就不再存在了。
  3. 没有ItemContextMenuHidden()事件,否则我会尝试这样做。在添加启动时,
  4. 会添加这些项目(即只有一次没有ItemContextMenuDisplay(处理程序)),但是这些项目永远不会出现,因为当菜单显示时,它们总是被清除。

有谁有别的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 04:00:59

解决了问题。

variable

  • attachment

  • 将命令按钮定义为类级静态Outlook.Application事件ContextMenuClose

新ApplicationEvents_11_ContextMenuCloseEventHandler(outlookInstance_ContextMenuClose);

  • implement outlookInstance.ContextMenuClose +=方法作为代码

outlookInstance_ContextMenuClose(OlContextMenu ContextMenu) { if (ContextMenu == OlContextMenu.olItemContextMenu) { ContextIndexButton.Click -=新_CommandBarButtonEvents_ClickEventHandler();ContextIndexButton = null;}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9272747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档