如何将 EventHandler 作为方法参数传递
How can I pass EventHandler as a method parameter
我正在尝试编写一个也将处理点击事件的通用方法,并且我希望允许用户将他自己的方法作为点击事件传递。
像这样:
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);
}
}
我知道这是可能的,但我不记得怎么做...
只需使用事件处理程序的类型作为参数类型:
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);
}
}
注意:完成后不要忘记删除事件处理程序,否则可能会泄漏内存!
是这样的吗?
void DoWork(Action<object, EventArgs> handler)
{
if (condition)
{
OnSomeEvent(this, EventArgs.Empty);
}
}
void OnSomeEvent(object sender, EventArgs e)
{
}
将其作为参数传递:
DoWork(OnSomeEvent);
您可以将动作委托传递给函数
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);
}
我正在尝试编写一个也将处理点击事件的通用方法,并且我希望允许用户将他自己的方法作为点击事件传递。 像这样:
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);
}
}
我知道这是可能的,但我不记得怎么做...
只需使用事件处理程序的类型作为参数类型:
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);
}
}
注意:完成后不要忘记删除事件处理程序,否则可能会泄漏内存!
是这样的吗?
void DoWork(Action<object, EventArgs> handler)
{
if (condition)
{
OnSomeEvent(this, EventArgs.Empty);
}
}
void OnSomeEvent(object sender, EventArgs e)
{
}
将其作为参数传递:
DoWork(OnSomeEvent);
您可以将动作委托传递给函数
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);
}