1

LinkBut​​tons を動的に作成し、onclick イベントをサーバー側から次のように変更しようとしています。

        for (int i = 1; i <= pagenum; i++)
    {
        LinkButton pb = new LinkButton();
        pb.Text=i.ToString();
        pb.CommandArgument=i.ToString();
        pb.ID = "PageLink" + i.ToString()+",";
        pb.Click += new EventHandler(Method1);
        pb.Visible = true;
        PagesDiv.Controls.Add(pb);
    }

 public void Method1(object sender, EventArgs e, int pagenum)
{
    PagesDiv.Visible = true;
    TableDiv.Visible = true;
    localhost.StorageService w = new localhost.StorageService();
    DataTable dt = w.GetItemsByCategory(pagenum, categoryname.ToString());
    .................................(alot of code here...)
}

しかし、私の問題は、「pb.Click += new EventHandler(Method1);」でエラーが発生することです。「'Method1' のオーバーロードは、デリゲート 'System.EventHandler' と一致しません」と言って、なぜ機能していないのかわかりません...

どんな助けでも大歓迎です!!!

4

1 に答える 1

0

イベント ハンドラーに追加のパラメーターを追加しました。そのため、 のClickイベント ハンドラーとLinkButton一致しません。あなたのものを見てください:

public void Method1(object sender, EventArgs e, int pagenum)

そして、それが期待するものを見てください:

public void Method1(object sender, EventArgs e)

したがって、エラー。pagenumハンドラーの割り当てで言及されていないため、この場合にどのように渡されると予想されるかはわかりません。

pb.Click += new EventHandler(Method1);

引数をハンドラーに渡すには他にもいくつかのトリックがあるかもしれませんが、私にとって常に機能し、非常に簡単に思えるのは、単純にラムダ関数でラップすることです。

pb.Click += (sender, e) => Method1(sender, e, pagenum);

これにより、 の値をキャプチャした後にメソッドを呼び出す匿名メソッドが作成pagenumされます。それが呼び出しコードにあるものは何でも。

于 2014-03-11T17:28:49.403 に答える