0

多くのボタンを持つテーブルを動的に作成しています。目標は、ボタンをクリックするたびに、その横にあるボタンの色が変わることです。ただし、ボタンをクリックするたびに、クリックしたボタンの色が変わります。その隣にあるものは、2 回目のクリック後にのみ色が変わります。

私はこれに非常に慣れておらず、英語があまり得意ではないので、説明をできるだけわかりやすくしていただければ、それが最善です.

コードは次のとおりです。

protected void Page_Load(object sender, EventArgs e)
{
    Table tavla = new Table(); //New Table
    tavla.GridLines = GridLines.Both; //Gridlines
    tavla.BorderWidth = 4; //BorderWidth
    tavla.ID = "tbl1"; //Table ID
    Button btn = null; //New Button
    for (int i = 1; i <= 8; i++)
    {
        TableRow myline = new TableRow();
        for (int j = 1; j <= 8; j++)
        {

            TableCell ta = new TableCell();
            ta.HorizontalAlign = HorizontalAlign.Center;
            btn = new Button();
            btn.Width = 40;
            btn.Height = 30;
            btn.ID = i.ToString() + j.ToString();

            btn.Text = btn.ID.ToString();
            if ((btn.ID == "54") || (btn.ID == "45"))
            {
                btn.BackColor = Color.Black;
                btn.Text = btn.ID.ToString();
                btn.ForeColor = Color.Aqua;
            }
            else if ((btn.ID == "44") || (btn.ID == "55"))
            {
                btn.BackColor = Color.Red;
                btn.Text = btn.ID.ToString();
                btn.ForeColor = Color.Aqua;
            }

            else
            {
                btn.BackColor = Color.Empty;
                btn.ForeColor = Color.Black;
            }
            btn.Click += new EventHandler(Checking);
            ta.Controls.Add(btn);
            myline.Cells.Add(ta);

        }

        tavla.Rows.Add(myline);
    }

    Panel1.Controls.Add(tavla);

}

protected void Checking(object sender, EventArgs e)
{

    Button btn1 = sender as Button; // New button.
    btn1.ID = (int.Parse(btn1.ID) + 1).ToString(); // Button ID += 1
    btn1.BackColor = Color.Red; // Button changes color
    this.Label1.Text = btn1.ID.ToString(); //Label showing the ID of button clicked.

}

最終結果: http://i50.tinypic.com/260frb9.png

4

1 に答える 1

0

確認方法では、クリックしたばかりのボタンの ID を変更していますが、これは間違っています。

あなたが望むのは次のようなものです(私の頭の上では、コードの間違いがあるかもしれません):

protected void Checking(object sender, EventArgs e)
{
  Button btn1 = sender as Button; // New button.
  string nextId = (int.Parse(btn1.ID) + 1).ToString();
  Button nextBtn = btn1.Parent.FindControl(nextId) as Button;
  //check here to make sure nextBtn is not null :)
  nextBtn.BackColor = Color.Red; // Button changes color
  this.Label1.Text = btn1.ID.ToString(); //Label showing the ID of button clicked.

 }
于 2013-04-10T22:02:05.910 に答える