VSTO - Outlook 2007 - Показать форму перед отправкой сообщения? - PullRequest
5 голосов
/ 16 ноября 2009

Я новичок в программировании надстроек Outlook и не уверен, возможно ли это:

Я хочу отобразить всплывающую форму (или выбор) и запросить ввод данных пользователем, когда они нажимают кнопку Отправить. По сути, всякий раз, когда они отправляют электронное письмо («Новое» или «Ответить»), их просят выбрать значение в раскрывающемся списке (предпочтительно элементы списка из базы данных SQL). Основываясь на их выборе, к теме письма будет добавлено текстовое сообщение.

Я провел исследование и похоже, что мне следует использовать Области форм, но я не уверен, как отобразить всплывающую / дополнительную форму, когда пользователь нажимает кнопку Отправить. Кроме того, похоже, что области формы можно использовать для расширения / замены текущей почтовой формы VIEW, но можно ли использовать ее для формы CREATE NEW?

Спасибо всем за время.

1 Ответ

5 голосов
/ 09 декабря 2009

Вы, вероятно, можете добавить обработчик события отправки элемента в метод внутреннего запуска ThisAddIn, а затем в событии отправки элемента вызвать пользовательскую форму (форму окна). В приведенном ниже примере я вызываю пользовательскую форму окна как модальное диалоговое окно до отправки элемента электронной почты и после нажатия кнопки отправки.

private void InternalStartup()
{
    this.Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
}

void Application_ItemSend(object Item, ref bool Cancel)
{
    if (Item is Microsoft.Office.Interop.Outlook.MailItem)
    {
        Microsoft.Office.Interop.Outlook.MailItem currentItem = Item as Microsoft.Office.Interop.Outlook.MailItem; 
        Cancel = true;
        Forms frmProject = new ProjectForm();;

        DialogResult dlgResult = frmProject.ShowDialog();

        if (dlgResult == DialogResult.OK) 
            System.Windows.Forms.SendKeys.Send("%S"); //If dialog result is OK, save and send the email item
        else
            Cancel = false; 

        currentItem.Save();
        currentItem = null;
    }
}
...