Freigeben über


Simple Outlook 2007 VSTO 2005 SE add-in that shows ItemContextMenuDisplay and Table usage

Someone on the team was looking to use VSTO 2005 SE to display a context menu in Outlook 2007 when you right-click on a mail item to delete all related mail items. I put together some quick and dirty code that shows how to do this. The interesting things here I think is the new Outlook 2007 ItemContextMenuDisplay event and the use of the new Outlook 2007 table object. You can read more about the table object here https://msdn2.microsoft.com/en-us/library/ms772423.aspx. Also, this add-in doesn’t actually delete anything yet, it just shows a dialog box with what it would have deleted.

E.

using System;

using System.Windows.Forms;

using Microsoft.VisualStudio.Tools.Applications.Runtime;

using Outlook = Microsoft.Office.Interop.Outlook;

using Office = Microsoft.Office.Core;

namespace OutlookAddIn1

{

    public partial class ThisAddIn

    {

        private Office.CommandBarButton btn;

        private Outlook.MailItem mail;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)

        {

            this.Application.ItemContextMenuDisplay += new Outlook.ApplicationEvents_11_ItemContextMenuDisplayEventHandler(Application_ItemContextMenuDisplay);

        }

        void Application_ItemContextMenuDisplay(Office.CommandBar CommandBar, Outlook.Selection Selection)

        {

            if (Selection.Count > 0)

            {

                mail = Selection[1] as Outlook.MailItem;

                if (mail != null)

                {

                    btn = CommandBar.Controls.Add(Office.MsoControlType.msoControlButton, missing, missing, missing, missing) as Office.CommandBarButton;

                    btn.Caption = "Delete related...";

                    btn.Click += new Office._CommandBarButtonEvents_ClickEventHandler(btn_Click);

                }

            }

        }

        void btn_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)

        {

            if (mail != null)

            {

                string subject = mail.Subject;

                string filter = @"@SQL=""urn:schemas:httpmail:subject"" like '%" + subject + "%'";

                Outlook.Table tbl = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).GetTable(filter, Outlook.OlTableContents.olUserItems);

                string result = "";

                while (!tbl.EndOfTable)

                {

                    Outlook.Row row = tbl.GetNextRow();

                    string EntryID = row["EntryID"].ToString();

                    Outlook.MailItem oMail = (Outlook.MailItem)Application.Session.GetItemFromID(EntryID, Type.Missing);

                    result += oMail.Subject + " from " + oMail.SenderName + " on " + oMail.SentOn.ToString() + System.Environment.NewLine;

                    // TODO: Actually delete it (oMail.Delete())

                }

                MessageBox.Show("Would have deleted: " + System.Environment.NewLine + result);

            }

        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)

        {

        }

        #region VSTO generated code

        /// <summary>

        /// Required method for Designer support - do not modify

        /// the contents of this method with the code editor.

        /// </summary>

        private void InternalStartup()

        {

            this.Startup += new System.EventHandler(ThisAddIn_Startup);

            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);

        }

        #endregion

    }

}

Comments

  • Anonymous
    October 09, 2006
    Can you do this in Outlook 2003?
  • Anonymous
    October 10, 2006
    Hello Eric,I sure wish Word had an equivalent for the ItemContextMenuDisplay event.Right now, we must use WindowBeforeRightClick. There are two drawbacks to this approach:- It does not work if the user presses the context menu keyboard key (this is bad for acccessibility)- We must grab the appropriate CommandBar object, which depends on the selection (text, table ...).Do you know if there is any short-time plan to add this kind of event to the Word OM ?Thanks a lot.
  • Anonymous
    October 31, 2006
    Sorry, this comment was meant for a post which has comment disabled. I found almost all article links are invalided in your previous posts. Could you please update the link? Thanks a lot