0

私のアプリケーションでは、動的に作成されたボタンの配列があります。これらのボタンの onclick イベントを発生させ、クリックしたボタンのテキストを変更しようとしています。これについて以下のコードを試しましたが、機能しません。これを行うにはどうすればよいですか?.何か提案はありますか?

コード:

   for (int i = 0; i < 5; i++)
    {
        lbl = new Button[5];
        lbl[i] = new Button();
        lbl[i].Text = "hi";
        lbl[i].Width = 30;
        lbl[i].Click += new EventHandler(lbl_click);
        //lbl[i].CssClass = "label";
        div1.Controls.Add(lbl[i]);
    }

クリックイベント

   protected void lbl_click(object sender, EventArgs e)
   {
    Button[] lbl = sender as button[];
    lbl[i].Text = "clicked";

   }
4

1 に答える 1

4

イベント ハンドラーでボタンの配列を再作成していますが、この配列には以前に作成したボタンが取り込まれていません。これは空であり、この配列の要素を使用しようとすると null 参照例外が発生します ( null.Text、機能しません)。
代わりに、sender オブジェクトは、ユーザーがクリックしたボタンを表します。

protected void lbl_click(object sender, EventArgs e)
{
     Button lbl = sender as Button;
     lbl.Text = "clicked";
}

また、クリックされた特定のボタンを知る必要がある場合は、作成時にそれらを区別するために何かを追加することをお勧めします。

たとえば、name プロパティを使用します。

Button[] lbl = new Button[5];
for(int i = 0; i< 5; i++)
{
    ....
    lbl[i].Name = "Button_" + i.ToString();
    ....
}

配列の宣言と初期化を、配列のすべての要素 (実際のボタン) を作成するループの外に移動したことに注意してください。

于 2013-03-29T08:19:31.303 に答える