C# - 单击时更改相邻按钮颜色

时间:2013-02-24 20:41:56

标签: c#

好吧,假设我们按照以下格式排列按钮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.
}

请原谅我糟糕的英语。

2 个答案:

答案 0 :(得分: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

之前检查列/行是否为空

答案 1 :(得分:0)

您可以将Tag属性设置为数字,然后在常用的点击方法中,您可以这样:

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

或者你可以使用数组。