web-dev-qa-db-ja.com

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

私はそれが可能であることを知っていますが、それを行う方法を覚えていません...

12
Liran Friedman

イベントハンドラーのタイプを引数タイプとして使用するだけです。

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

注:完了したら、イベントハンドラーを削除することを忘れないでください。削除すると、メモリがリークする可能性があります。

19
Patrick Hofman

アクションデリゲートを関数に渡すことができます

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);
}
1
Pranay Rana

このようなもの?

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

void OnSomeEvent(object sender, EventArgs e)
{

}

引数として渡す:

DoWork(OnSomeEvent);
0
Emile Pels