2010-09-15 7 views
1

Je dois ajouter un bouton au menu contextuel de la boîte de réception. J'ai ce travail bien. Qu'est-ce que je dois comprendre est dans la mise en œuvre du gestionnaire d'événements comment puis-je déterminer quel article/articles a été cliqué?VSTO Menu contextuel du complément Outlook 2007 CommandBarButton click event

 

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 ... 
} 
 

Dans le gestionnaire d'événements cmdButtonCopy_Click J'ai besoin de copier l'élément spécifique qui était d'un clic droit, mais je ne peux pas comprendre comment dire quel élément a été cliqué.

Répondre

1

Vous pouvez utiliser la propriété de balise dans la CommandBarButton

+1

Ce n'est pas la « meilleure » façon possible j'espérais pour, mais ça marche. Je mets la propriété Tag à l'EntryId de l'article de courrier puis dans le gestionnaire de clic je reçois cet article de l'Application.Session. Merci. – Adam

+0

@Adam J'essaie de faire exactement la même chose. Pourriez-vous préciser comment vous avez fait cela? Comment/où avez-vous reçu le EntryId de l'article de courrier sélectionné? Comment avez-vous accédé à l'article de courrier dans le gestionnaire de clic? Merci un million d'avance. – kmarks2

1

J'ai écrit le code pour résoudre votre problème ont un coup d'oeil:

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); 
    } 
+0

La seule chose qui vous manque ici est la variable globale pour 'mailitm' que vous définissez. –

Questions connexes