我正在尝试将方法绑定到按钮的click事件。
var controlEvent = button.GetType().GetEvent("Click");
var eventMethod = GetType().GetMethod("button_Click");
var handler = Delegate.CreateDelegate(controlEvent.EventHandlerType, button, eventMethod);
void button_Click(object sender, EventArgs e) { }
当我调用CreateDelegate时,我得到了
Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type
我觉得我将错误的类型传递给CreateDelegate,但我不确定。
答案 0 :(得分:0)
这里没有理由使用反射。有一段时间以来,我一直使用winforms / webforms,但看起来应该是这样的:
button.OnClick += button_Click;
我进一步评论button_Click
不是方法的好名字,除非它的作用是单击按钮。这个惯例来自一些非常古老的微软指导,而且它并不好。在他们做什么之后命名功能,而不是他们如何使用。考虑一下这个读取的好多了
button.OnClick += showCalculations;
我通常更进一步摆脱愚蠢的(object, EventArgs)
参数(除非我使用这些参数)
button.OnClick += (o,e) => showCalculations();
//...
void showCalculations() {
//...
}
答案 1 :(得分:0)
Delegate.CreateDelegate
的第二个参数是调用方法的类实例。
您的方法未在button
上定义,因此您收到错误
您需要通过this
。