Слово - отражающие события - PullRequest
0 голосов
/ 27 декабря 2010

Я пытаюсь использовать рефлексию, чтобы получить все события в слове, а затем создать делегата, который я могу добавить к одному из этих событий.Пока у меня есть код: Спасибо за ответ.

Ну, идея состоит в том, чтобы передать имя события, такого как DocumentBeforeSave, методу, похожему на:

EventInfo p = getEvent(this.Application, "DocumentBeforeSave");

public EventInfo getEvent(Word.Application wordApp, string eventName)
    {
      Type wordType = wordApp.GetType();

      EventInfo[] f = wordApp.GetType().GetEvents();
      EventInfo result = (from o in f
                where o.Name == eventName
                select o).FirstOrDefault();
      return result;
    }

Теперьэто дает мне EventInfo из Microsoft.Office.Interop.Word.ApplicationEvents4_DocumentBeforeSaveEventHandler.Что для меня выглядит как Word.ApplicationEvents4_DocumentBeforePrintEventHandler, который может назначать и обработчик событий с + =;

. Я вижу, что EventInfo имеет метод AddEventHandler.Я надеюсь, что смогу присоединить свой собственный делегат для обработки при возникновении события DocumentBeforeSave.

Проблема в том, что я просто не могу правильно определить делегата.Я играл с этим:

    MethodInfo[] myArrayMethodInfo = msw.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
          MethodInfo r = (from o in myArrayMethodInfo
                  where o.Name == "add_" + p.Name
                  select o).FirstOrDefault();

Delegate del = Delegate.CreateDelegate(p.EventHandlerType,r, false);

Но делегат всегда нулевой.Это просто невозможно или я просто делаю это неправильно.

Спасибо

1 Ответ

0 голосов
/ 27 декабря 2010

Вы можете создать Дерево выражений .

Эта функция позволяет компилировать код во время выполнения в произвольный тип делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...