2010-09-15 2 views
1

Мне нужно добавить кнопку в контекстное меню папки «Входящие». У меня это нормально работает. Что мне нужно выяснить в реализации обработчика событий, как определить, какой элемент/элементы был нажат?VSTO 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 ... 
} 
 

В обработчик событий cmdButtonCopy_Click мне нужно скопировать конкретный элемент, который был правой щелкнули, но я не могу понять, как сказать, какой пункт был щелкнул.

ответ

1

Вы можете использовать теги свойства внутри CommandBarButton

+1

Это не «лучше» можно, как я надеялся, для, но он работает. Я устанавливаю свойство Tag в EntryId почтового элемента, а затем в обработчике кликов я возвращаю этот элемент из Application.Session. Благодарю. – Adam

+0

@Adam Я пытаюсь сделать то же самое. Не могли бы вы рассказать о том, как вы это сделали? Как/где вы получили EntryId выбранного элемента почты? Как вы вообще получили доступ к почтовому элементу в обработчике кликов? Спасибо миллион заблаговременно. – kmarks2

1

Я написал код, чтобы решить вашу проблему, посмотрите на него:

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

Единственное, что вам не хватает здесь, это глобальная переменная для 'mailitm', которую вы устанавливаете. –