2009-12-22 3 views
0

에서 이벤트 핸들러를 설정합니다내가이 같은 문자열이 문자열

string myEventName = "myButton_Click"; 

가 그럼 난 몇 가지 버튼의 클릭에 대한 EventHandlers을 작성해야합니다,하지만 매개 변수는 "myButton_Click"로 문자열을 전달 메소드가 이미 있습니다.

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

리플렉션 또는 다른 종류의 트릭을 사용하면 가능합니까?

감사합니다.

+0

이 핸들러를 설정하는 복잡한 방법처럼 보인다. 문자열 변수에 메서드 이름이있는 이유가 있습니까? – LBushkin

답변

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 명명 규칙을 가져 오는 중 ... 이름 지정 방법을 알아야 항상 도움이됩니다. –

관련 문제