C # (outlook add-in) контекстное меню на папках - PullRequest
6 голосов
/ 11 апреля 2011

В моем VSTO outlook addin я пытаюсь вставить кнопку, которая будет отображаться при щелчке правой кнопкой мыши по папке В моей функции запуска у меня есть это:

Outlook.Application myApp = new Outlook.ApplicationClass();
myApp.FolderContextMenuDisplay += new ApplicationEvents_11_FolderContextMenuDisplayEventHandler(myApp_FolderContextMenuDisplay);

тогда у меня есть обработчик для этого ...

void myApp_FolderContextMenuDisplay(CommandBar commandBar, MAPIFolder Folder)
{
    var contextButton = commandBar.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton;
    contextButton.Visible = true;
    contextButton.Caption = "some caption...";
    contextButton.Click += new _CommandBarButtonEvents_ClickEventHandler(contextButton_Click);
}

и, наконец, обработчик для клика ....

void contextButton_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
    //stuff here
}

Мой вопрос: как мне отправить это MAPIFolder Folder с myApp_FolderContextMenuDisplay на contextButton_Click?

(Если это можно сделать другим способом, я тоже открыт для предложений)

1 Ответ

3 голосов
/ 11 апреля 2011

Самый простой способ - просто использовать замыкание, например:

// where Folder is a local variable in scope, such as code in post
contextButton.Click += (CommandBarButton ctrl, ref bool cancel) => {
   DoReallStuff(ctrl, Folder, ref cancel);
};

При необходимости обязательно очистите событие.Единственное, на что следует обратить внимание, так это то, что RCW для папки теперь может иметь «увеличенный срок службы», так как закрытие может поддерживать его дольше, чем раньше (но с OOM очень важно вручную отпуститьRCW, когда не нужны.)

Удачного кодирования.

...