2015-07-28 3 views
-1

Я использую интерфейс Outlook com для автоматизации создания электронных писем. Я пытаюсь обработать событие MailItem.Close, но проблема в том, что MailItem также имеет метод MailItem.Close(). Я надеялся, что компилятор сделает вывод, что я имел в виду событие, так как я пытался присоединить к нему делегата, однако это не так.Outlook COM Interop метод имя события конфликт

private void editButton_Click(object sender, RoutedEventArgs e) 
{ 
    outlook.MailItem editItem; 
    ... 
    editItem.Close += delegate { editItem_onClose(editItem); }; 
    ... 
} 

Фактическая ошибка:
Error 4 Cannot assign to 'Close' because it is a 'method group'

и предупреждение:
Warning 3 Ambiguity between method 'Microsoft.Office.Interop.Outlook._MailItem.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose)' and non-method 'Microsoft.Office.Interop.Outlook.ItemEvents_10_Event.Close'. Using method group.

EDIT:

мой Microsoft.Office.Interop.Outlook NameSpace не имеет интерфейс ItemEvents_10_Event. У меня есть outlook.ItemEvents_10_SinkHelper и outlook.ItemEvents_10 я пытался бросить в outlook.ItemEvents_10 так:

var events = (outlook.ItemEvents_10)editItem; 
events.Close += delegate { editItem_AfterWrite(editItem, editRow); }; 

, но я все еще получаю «events.Close является групповой метод» ошибка.

+0

Перед тем, как добавить обработчик, переместите 'editItem' в' ItemEvents_10_Event'? – GSerg

+0

Как вы ссылаетесь на взаимодействие COM и как вы проверяете, что интерфейс 'ItemEvents_10_Event' не существует? [Мероприятие должно быть там] (http://i.stack.imgur.com/Hx8yo.png). У вас есть псевдоним 'using outlook = ...' в верхней части вашего файла, нижний регистр 'o' в' outlook.ItemEvents_10' очень странный. –

+0

Я добавил ссылку на «Microsoft Outlook 15.0 Object Library Version 9.5» с помощью диалогового окна ссылки VisualStudio. как я набираю «ItemEvents_10 ...», IntelliSense выводит все возможные варианты, которые заканчивают мое текущее утверждение, и есть только два, два, о которых я говорил. Есть ли способ сделать это? –

ответ

2

Необходимо нанести объект элемента письма на правый интерфейс или класс, который предоставляет событие или метод. Интерфейс ItemEvents_10_Event обеспечивает событие Close, а класс MailItem предоставляет метод Close.

+0

У пространства имен, которое у меня нет, не существует 'ItemEvents_10_Event', оно имеет' ItemEvents_10' и '... 10_SinkHelper'. Я попытался передать его в элемент ItemEvents_10 следующим образом: 'var events = (outlook.ItemEvents_10) editItem; events.Close + = delegate {editItem_AfterWrite (editItem, editRow); }; 'и я все еще получаю« .Close - это групповая ошибка метода ». это выглядит беспорядочно, см. мое редактирование выше. –

+1

@MichaelBillingham Интерфейс 'ItemEvents_10' является противоположным тому, что вы хотите, так как вы принудительно должны использовать доступ к методу Close (OlInspectorClose) вместо события. –

+0

Это имеет смысл, где это событие? –