VSTO C# - Outlook Addin - Как различать объекты.AttachmentSelections
Надстройка для Outlook 2010 в Visual Studio (C#).
Я пытаюсь найти способ определить разницу между.AttachmentSelection, полученным из Проводника (при предварительном просмотре почтового элемента в папке входящих сообщений), и.AttachmentSelection, извлеченным из Инспектора (при двойном щелчке и фактическом открытии почты в отдельном окне)., если щелкнуть правой кнопкой мыши само вложение в Outlook
Я пытаюсь сделать что-то вроде:
public void ButtonClick(Office.IRibbonControl control)
{
//right clicked attachment item -> context menu
if (control.Context is Outlook.AttachmentSelection)
{
if (control.Context is Outlook.Inspector)
MessageBox.Show("inspector");
else if (control.Context is Outlook.Explorer)
MessageBox.Show("explorer");
}
}
Но как только первое "если" действительно, внутренние оба терпят неудачу. потому что контекст не Outlook Inspector, ни Outlook Explorer. Примеры и объяснения Microsoft не очень помогли, поскольку в своих фрагментах кода они просто выводили сообщения вложения, не углубляясь в проверку их происхождения (explorer\inspector).
Мне нужно взять Mailitem, из которого пользователь щелкает правой кнопкой мыши вложение, и извлекать из него информацию, а не переходить прямо к вложениям.
любая идея? кто-нибудь?
2 ответа
Вы можете использовать метод ActiveWindow класса Application, чтобы определить, было ли вложение открыто из окна проводника или инспектора. Метод возвращает объект, представляющий текущее окно Microsoft Outlook на рабочем столе, либо объект Explorer, либо объект Inspector. Ничего не возвращает, если нет открытого Outlook Explorer или инспектора.
Также может оказаться полезным событие BeforeAttachmentPreview элементов Outlook. Он запускается до предварительного просмотра вложения, связанного с экземпляром родительского объекта. Т.е. событие инициируется до предварительного просмотра вложения, либо из полосы вложения в области чтения активного проводника, либо из активного инспектора. Имейте в виду, вы можете отменить операцию. Вам просто нужно установить для параметра отмены значение true.
Как насчет? прямо из MSDN
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.Subject = "This text was added by using code";
mailItem.Body = "This text was added by using code";
}
}