【问题标题】:VSTO Outlook 2007 Add-in Context Menu CommandBarButton click eventVSTO Outlook 2007 加载项上下文菜单 CommandBarButton 单击事件
【发布时间】:2010-09-15 13:55:11
【问题描述】:

我需要在收件箱的上下文菜单中添加一个按钮。我有这个工作正常。我需要弄清楚的是在事件处理程序的实现中如何确定单击了哪些项目?

private void AddIn_Startup(object sender, EventArgs e) { Application.ItemContextMenuDisplay += Application_ItemContextMenuDisplay; } private void Application_ItemContextMenuDisplay(CommandBar commandBar, Selection selection) { commandBar.Controls[1].BeginGroup = true; // add seperator before first menu var cmdButtonCopy = (CommandBarButton)commandBar.Controls.Add(MsoControlType.msoControlButton, 1, Missing.Value, 1, Missing.Value); cmdButtonCopy.Caption = "&Copy Message"; cmdButtonCopy.Click += cmdButtonCopy_Click; } private void cmdButtonCopy_Click(CommandBarButton ctrl, ref bool canceldefault) { // no sender/event args to determine which item was clicked ... }

在 cmdButtonCopy_Click 事件处理程序中,我需要复制被右键单击的特定项目,但我不知道如何判断单击了哪个项目。

【问题讨论】:

    标签: vsto outlook-2007 outlook-addin


    【解决方案1】:

    您可以在 CommandBarButton 中使用 tag 属性

    【讨论】:

    • 这不是我希望的“最佳”方式,但它确实有效。我将 Tag 属性设置为邮件项的 EntryId,然后在单击处理程序中我从 Application.Session 中取回该项目。谢谢。
    • @Adam 我正在尝试做同样的事情。您能否详细说明您是如何做到这一点的?您如何/从哪里获得所选邮件项目的 EntryId?您是如何在点击处理程序中访问邮件项目的?提前一百万谢谢。
    【解决方案2】:

    我已经写了代码来解决你的问题,看看吧:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            Application.ItemContextMenuDisplay += new ApplicationEvents_11_ItemContextMenuDisplayEventHandler(Application_ItemContextMenuDisplay);
        }
    
        void Application_ItemContextMenuDisplay(CommandBar CommandBar, Selection Selection)
        {
            CommandBarButton mycmdbarbtn = (CommandBarButton)CommandBar.Controls.Add(MsoControlType.msoControlButton,missing, missing, 1,true);
            mycmdbarbtn.Caption = "Test Button";           
            mycmdbarbtn.Click += new _CommandBarButtonEvents_ClickEventHandler(mycmdbarbtn_Click);           
            mailitm=Selection.Application.ActiveExplorer().Selection[1]; // to get the currently selected mailitem.
        }
    
        void mycmdbarbtn_Click(CommandBarButton Ctrl, ref bool CancelDefault)
        {
            MessageBox.Show("The subject of the clicked mail is " + mailitm.Subject);
        }
    

    【讨论】:

    • 您在这里唯一缺少的是您正在设置的mailitm 的全局变量。
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多