【问题标题】:How can I pass EventHandler as a method parameter如何将 EventHandler 作为方法参数传递
【发布时间】:2015-03-10 02:50:21
【问题描述】:
我正在尝试编写一个通用方法来处理单击事件,并且我希望允许用户将他自己的方法作为单击事件传递。
像这样的:
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);
}
}
我知道这是可能的,但我不记得怎么做......
【问题讨论】:
标签:
c#
events
delegates
event-handling
【解决方案1】:
只需使用事件处理程序的类型作为参数类型:
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);
}
}
注意:完成后不要忘记删除事件处理程序,否则可能会泄漏内存!
【解决方案2】:
这样的?
void DoWork(Action<object, EventArgs> handler)
{
if (condition)
{
OnSomeEvent(this, EventArgs.Empty);
}
}
void OnSomeEvent(object sender, EventArgs e)
{
}
将其作为参数传递:
DoWork(OnSomeEvent);
【解决方案3】:
您可以将动作委托传递给函数
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);
}