好吧,假设我们按照以下格式排列按钮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.
}
请原谅我糟糕的英语。
答案 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;
或者你可以使用数组。