Я пытаюсь использовать рефлексию, чтобы получить все события в слове, а затем создать делегата, который я могу добавить к одному из этих событий.Пока у меня есть код: Спасибо за ответ.
Ну, идея состоит в том, чтобы передать имя события, такого как 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);
Но делегат всегда нулевой.Это просто невозможно или я просто делаю это неправильно.
Спасибо