2009-12-22 50 views
0

我有一個這樣的字符串:設置一個事件處理程序從字符串

string myEventName = "myButton_Click"; 

然後,我需要一些點擊按鈕創建一個事件處理器,不過將字符串作爲參數,則「myButton_Click」方法已經存在:

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

這是可能的,使用反射或其他類型的把戲?

謝謝。

+0

這似乎是設置一個處理程序的複雜的方式。爲什麼你有一個字符串變量的方法名稱的原因是什麼? – LBushkin 2009-12-22 19:44:48

回答

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」或類似的東西 - 它不是事件本身。

+0

+1用於提出命名約定...知道我們應該如何命名事物總是有幫助的 – 2009-12-22 18:09:32