我有一個這樣的字符串:設置一個事件處理程序從字符串
string myEventName = "myButton_Click";
然後,我需要一些點擊按鈕創建一個事件處理器,不過將字符串作爲參數,則「myButton_Click」方法已經存在:
private void myButton_Click (object sender, RoutedEventArgs e) { }
這是可能的,使用反射或其他類型的把戲?
謝謝。
我有一個這樣的字符串:設置一個事件處理程序從字符串
string myEventName = "myButton_Click";
然後,我需要一些點擊按鈕創建一個事件處理器,不過將字符串作爲參數,則「myButton_Click」方法已經存在:
private void myButton_Click (object sender, RoutedEventArgs e) { }
這是可能的,使用反射或其他類型的把戲?
謝謝。
是的,你可以使用反射。這是相當醜陋的,但它應該工作:
// 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用於提出命名約定...知道我們應該如何命名事物總是有幫助的 – 2009-12-22 18:09:32
您可以使用反射來做到這一點。看看這2個鏈接給你所有你需要知道:
這似乎是設置一個處理程序的複雜的方式。爲什麼你有一個字符串變量的方法名稱的原因是什麼? – LBushkin 2009-12-22 19:44:48