0

OK、ボタンが次の形式で5x5に配置されているとしましょう

[11] [12] [13] [14] [15]
[21] [22] [23] [24] [25]
[31] [32] [33] [34] [35]
[41] [42] [43] [44] [45]
[51] [52] [53] [54] [55]

たとえば、ボタン34をクリックして、ボタン24、44、33、35の色を変更したい場合、問題は、ボタンをクリックしてこれらの値のいずれかを返すときに、その方法がわからないことです。 。私がやりたいことの擬似コードを取ります。

When I press the button [i, j]:
Change color of button[i-1, j];
Change color of button[i +1, j];
Change color of button[i, j +1];
Change color of button[i, j-1];

したがって、ボタンを押すと、ボタンの値i、jを取得する必要があり、同じスタイルの他のボタン(i + 1、jなど)を処理する可能性があります

私は各ボタンを別々に扱うことができました.....

private void button1_Click(object sender, EventArgs e)
{ // change colors
}
 private void button2_Click(object sender, EventArgs e)
{ // change colors
}
 private void button3_Click(object sender, EventArgs e)
{ // change colors
}
....
 private void button25_Click(object sender, EventArgs e)
{ // change colors
}

、.....しかし、25個のボタンがあり、25個のキーすべてに同じコードを記述したくありません。

私が欲しいのはそれです:

 private void button[i][j]_Click(object sender, EventArgs e)
{ 
 button[i+1][j].BackColor = Color.Red;
 button[i][j+1].BackColor ...... etc. etc.  
  // I know is incorrect, but is just how I want to act, if you understand me.
}

すみません、私の悪い英語。

4

2 に答える 2

1

TableLayoutPanel最もエレガントな解決策は、 を使用してすべてのボタンを配置することだと思います。次に、すべてのボタンを次の方法で処理できます。

        private void button_Click(object sender, EventArgs e)
        {
            Button clickedBtn = sender as Button;
            var cp = tableLayoutPanel1.GetCellPosition(clickedBtn);

            Button up = (Button)tableLayoutPanel1.GetControlFromPosition(cp.Column, cp.Row - 1);
            //up.Color = ...
            Button down = (Button)tableLayoutPanel1.GetControlFromPosition(cp.Column, cp.Row + 1);
            //etc
        }

1 を減算する前に、列/行が null でないかどうかを確認することを忘れないでください

于 2013-02-24T20:56:25.723 に答える
0

Tag プロパティを数値に設定すると、一般的なクリック メソッドで次のように設定できます。

int i = Math.Floor(((int)sender.Tag) / 10);
int j = ((int)sender.Tag) - i;

または、配列を使用することもできます。

于 2013-02-24T20:45:38.030 に答える