Установить обработчики событий из строки - PullRequest
0 голосов
/ 22 декабря 2009

У меня есть такая строка:

string myEventName = "myButton_Click";

Затем мне нужно создать EventHandlers для нажатия какой-либо кнопки, но, передав параметр String в качестве параметра, метод myButton_Click уже существует:

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

Возможно ли это с помощью отражения или другого трюка?

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Да, вы можете использовать отражение. Это довольно некрасиво, но должно работать:

// 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 голосов
/ 22 декабря 2009

Вы можете сделать это с помощью отражения. Посмотрите на эти 2 ссылки, чтобы дать вам все, что вам нужно знать:

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

C # Динамическая подписка на события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...