2012-05-18 4 views
0

이 질문에 대해 설명하는 또 다른 질문이 있으면 찾을 수 없다는 것에 사과하겠습니다.하지만 내가하고 싶은 일에 관련된 용어에 익숙하지 않은 것 같아요.이름으로 EventHandler를 가져 옵니까?

내가하려는 것은 이름으로 버튼에 이벤트 핸들러를 추가하는 것입니다. 예를 들어 아래 코드에서 showInfo를 추가하려는 대신 "showInfo"와 같은 이름 (문자열)으로 EventHandler를 참조 할 수 있습니까? 네,

myButton.Click += new EventHandler(showInfo); 

void showInfo(object sender, EventArgs e) 
{ 
    // .. 
} 

답변

2

당신은 반사를 통해 방법에서 대리자를 만든 다음 반사를 통해 이벤트에 그 가입. 샘플 코드 :

using System; 
using System.Reflection; 

class Publisher 
{ 
    public event EventHandler Foo; 

    public void RaiseFoo() 
    { 
     EventHandler handler = Foo; 
     if (handler != null) 
     { 
      handler(this, EventArgs.Empty); 
     } 
    } 
} 

class Subscriber 
{ 
    public void HandleEvent(object sender, EventArgs e) 
    { 
     Console.WriteLine("In HandleEvent"); 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     var subscriber = new Subscriber(); 
     var publisher = new Publisher(); 

     var methodInfo = typeof(Subscriber).GetMethod("HandleEvent"); 
     var handler = (EventHandler) Delegate.CreateDelegate(
       typeof(EventHandler), subscriber, methodInfo); 

     var eventInfo = typeof(Publisher).GetEvent("Foo"); 
     eventInfo.AddEventHandler(publisher, handler); 

     publisher.RaiseFoo(); 
    }  
} 
관련 문제