我有一个名为 clickEvent 的字符串变量,它可以包含不同的字符串,如“buttonAdd_Click”或“buttonSub_Click”或“buttonComp_Click”等。现在我需要将写入字符串的点击事件分配给一个名为 buttonCalc 的按钮。
buttonCalc.click += new RoutedEventHandler(clickEvent) 显然不起作用,因为 clickEvent 是变量而不是方法。
我怎样才能让这个东西工作?
谢谢
我有一个名为 clickEvent 的字符串变量,它可以包含不同的字符串,如“buttonAdd_Click”或“buttonSub_Click”或“buttonComp_Click”等。现在我需要将写入字符串的点击事件分配给一个名为 buttonCalc 的按钮。
buttonCalc.click += new RoutedEventHandler(clickEvent) 显然不起作用,因为 clickEvent 是变量而不是方法。
我怎样才能让这个东西工作?
谢谢
你可以通过反思来做到这一点:
private void AssignClickEvent(string methodName, Button button)
{
var method = this.GetType().GetMethod(methodName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
var ev = button.GetType().GetEvent("Click");
var handler = method.CreateDelegate(typeof(RoutedEventHandler), this);
ev.AddEventHandler(button, handler);
}
然后使用方法名称和您希望将其分配给的按钮调用它:
this.AssignClickEvent("ButtonAdd_Click", this.ButtonAdd);
也就是说,您可能想解释为什么要这样做,因为它们可能是一种更简单的方法。