Добавление делегата в обработчик событий - PullRequest
2 голосов
/ 07 февраля 2011

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

Type ty = this.Aplication.GetType().GetEvent("DocumentBeforeClose").EventHandlerType;
this.Application.GetType().GetEvent("DocumentBeforeClose").AddEventHandler(this,Delegate.CreateDelegate(ty, this, "test",false));

test просто выскакивает окно сообщения.

Кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 07 февраля 2011

Не могу проверить код прямо сейчас, но что если использовать

this.Application.GetType().GetEvent("DocumentBeforeClose").AddEventHandler(this.Application,Delegate.CreateDelegate(ty, this, "test",false));

См. Это. Приложение вместо этого в вызове AddEventHandler.

ОБНОВЛЕНИЕ: Теперь я могу проверить кодон работает нормально без исключений, если заменить «this» на «this.Application», как я упоминал ранее.Вот полный код:

namespace WordTestAddin
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
          Type ty = this.Application.GetType().GetEvent("DocumentBeforeClose").EventHandlerType;
          var testDelegate = Delegate.CreateDelegate(ty, this, "test", false);
          this.Application.GetType().GetEvent("DocumentBeforeClose").AddEventHandler(this.Application, testDelegate);
        }

        void test(Word.Document Doc, ref bool Cancel)
        {
          System.Windows.Forms.MessageBox.Show("test");
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        private void InternalStartup()
        {
          this.Startup += new System.EventHandler(ThisAddIn_Startup);
          this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

Убедитесь, что у вашего метода «test» правильная подпись.Также убедитесь, что «test» - это точное имя метода, а не «Test» или что-то в этом роде.

...