从字符串设置事件处理程序

时间:2009-12-22 18:02:08

标签: .net event-handling

我有一个像这样的字符串:

string myEventName = "myButton_Click";

然后我需要为点击某个按钮创建一个EventHandlers,但是将String作为参数传递,“myButton_Click”方法已经存在:

private void myButton_Click (object sender, RoutedEventArgs e) { }

这是可能的,使用反射或其他类型的技巧吗?

感谢。

2 个答案:

答案 0 :(得分:1)

是的,你可以使用反射。它相当丑陋,但应该有效:

// Here, "target" is the instance you want to use when calling
// myButton_Click, and "button" is the button you want to
// attach the handler to.
Type type = target.GetType();
MethodInfo method = type.GetMethod(myEventName,
    BindingFlags.Instance | BindingFlags.NonPublic);
EventHandler handler = (EventHandler) Delegate.CreateInstance(
    typeof(EventHandler), target, method);
button.Click += handler;

当然,您需要进行大量错误检查,但这是基本步骤。顺便说一下,你的变量最好被命名为“myHandlerName”或类似的东西 - 它不是事件本身。

答案 1 :(得分:0)

您可以使用反射来完成此操作。看看这两个链接,为您提供所需的一切:

http://msdn.microsoft.com/en-us/library/ms228976.aspx

C# Dynamic Event Subscription