Обработка событий из Word с помощью динамического взаимодействия с C # - PullRequest
2 голосов
/ 18 августа 2010

Из Silverlight 4 довольно легко запустить Word и позволить пользователю что-то сделать:

dynamic word = System.Runtime.InteropServices.Automation.CreateObject("Word.Application");
word.Visible = true;
word.Documents.Open("test.doc");

MS Word предоставляет событие Quit [1]. Я хотел бы справиться с этим событием, но для жизни я не могу понять, как. Я пытался сделать это:

public delegate void WordQuitEventHandler(object sender, ref bool cancel);
public event WordQuitEventHandler OnQuit;
private void WordOnQuit(dynamic sender, ref bool cancel)
{
    if (OnQuit != null)
    {
        OnQuit(this, ref cancel);
    }
}

, а затем сделать

word.Quit = WordOnQuit;

или

word.Quit += WordOnQuit;

Но невозможно назначить делегата для WordOnQuit динамическому объекту word.Quit. Так как запечатлеть это событие?

[1] http://msdn.microsoft.com/en-us/library/aa211898(v=office.11).aspx

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Просто чтобы быть завершенным, вы ищете ...

AutomationEvent quitEvent = AutomationFactory.GetEvent(word,"Quit");
quitEvent.EventRaised += new EventHandler<AutomationEventArgs>(quitEvent_EventRaised);

Конечно, вы можете включить обратный вызов, если хотите.

Кроме того, я обнаружил, что это событие может быть немного странным. Большую часть времени он срабатывает ... большую часть времени: -)

НТН.

1 голос
/ 18 августа 2010

Я не пробовал это, но это может сработать:

word.Quit += new WordQuitEventHandler(WordOnQuit);

В основном, компилятор не знает, к какому типу вы хотите преобразовать группу методов в данный момент - приведенный выше код должен датьДостаточно информации.

...