我正在尝试将一个委托添加到单词中的EventHandler,但在使用下面的代码时不断获得Argument Exception:
Type ty = this.Aplication.GetType().GetEvent("DocumentBeforeClose").EventHandlerType;
this.Application.GetType().GetEvent("DocumentBeforeClose").AddEventHandler(this,Delegate.CreateDelegate(ty, this, "test",false));
test只会弹出一个消息框。
有谁知道为什么会这样。
答案 0 :(得分:0)
目前无法测试代码,但如果使用
则会怎样this.Application.GetType().GetEvent("DocumentBeforeClose").AddEventHandler(this.Application,Delegate.CreateDelegate(ty, this, "test",false));
在AddEventHandler调用中看到this.Application而不是这个。
更新: 现在我可以测试代码,如果将“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”或其他东西。