如何将EventHandler作为方法参数传递

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);
    }
}

我知道这是可能的,但我不记得怎么做了...


3
可能是如何将事件传递给方法?的重复问题。 - pritaeas
3个回答

28

只需将事件处理程序的类型用作参数类型:

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);
    }
}

注意:完成后不要忘记删除事件处理程序,否则可能会导致内存泄漏!


3
不需要。EventHandler 已经是一个委托。查看它的签名即可。 - Patrick Hofman

1

你可以将动作委托传递给函数

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);
}

0

像这样的吗?

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

void OnSomeEvent(object sender, EventArgs e)
{

}

将其作为参数传递:
DoWork(OnSomeEvent);

1
但是单击事件不接受“handler”作为有效值。 - Liran Friedman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接