2015-01-12 60 views
4

我想寫一個通用的方法,也將處理一個單擊事件,我想讓用戶通過他自己的方法作爲單擊事件。 事情是這樣的:我怎樣才能通過EventHandler作爲方法參數

public static void BuildPaging(
    Control pagingControl, short currentPage, short totalPages, ???) 
{ 
    for (int i = 0; i < totalPages; i++) 
    { 
     LinkButton pageLink = new LinkButton(); 
     ... 
     pageLink.Click += ???; 
     pagingControl.Controls.Add(paheLink); 
    } 
} 

我知道這是可能的,但我不記得了怎麼辦呢?

+3

可能重複[如何將事件傳遞給方法?(HTTP: //stackoverflow.com/questions/2560258/how-to-pass-an-event-to-a-method) – pritaeas

回答

10

只需使用事件處理程序的類型作爲參數類型:

public static void BuildPaging(Control pagingControl 
           , short currentPage 
           , short totalPages 
           , EventHandler eh // <- this one 
          ) 
{ 
    for (int i = 0; i < totalPages; i++) 
    { 
     LinkButton pageLink = new LinkButton(); 
     ... 
     pageLink.Click += eh; 
     pagingControl.Controls.Add(paheLink); 
    } 
} 

注意:不要忘記在完成時刪除事件處理程序,否則可能會泄漏內存!

+0

我現在正在測試它 –

+1

它工作的很好。我以爲我應該使用這個代表... –

+1

@LiranFriedman:不需要。 ['EventHandler'](http://msdn.microsoft.com/en-us/library/system.eventhandler%28v=vs.110%29.aspx)已經是一個代理。見其簽名。 –

0

像這樣的東西?

void DoWork(Action<object, EventArgs> handler) 
{ 
    if (condition) 
    { 
     OnSomeEvent(this, EventArgs.Empty); 
    } 
} 

void OnSomeEvent(object sender, EventArgs e) 
{ 

} 

將它作爲一個參數:

DoWork(OnSomeEvent); 
+1

但是,單擊事件不接受「處理程序」作爲有效值 –

0

你可以通過動作代表發揮作用的

public static void BuildPaging(Control pagingControl, 
      short currentPage, short totalPages, Action<type> action) 

    for (int i = 0; i < totalPages; i++) 
{ 
    LinkButton pageLink = new LinkButton(); 
    ... 
    pageLink.Click += action; 
    pagingControl.Controls.Add(paheLink); 
}