我不知道如何清楚地表现出来,所以: 示例 - 我创建了一个按钮数组,如下所示:
Button[,] _button = new Button[3, 3];
public MainPage()
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
_button[i, j] = new Button();
_button[i, j].Name = "btn" + i.ToString() + j.ToString();
_button[i, j].Tag = 0;
//Add Click event Handler for each created button
_button[i, j].Click += _button_Click;
boardGrid.Children.Add(_button[i, j]);
Grid.SetRow(_button[i, j], i);
Grid.SetColumn(_button[i, j], j);
}
} // end MainPage()
private void _button_Click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
if (...)
b.Tag = 1;
else
b.Tag = 2;
}// end Click Event
现在我如何比较该数组中2个按钮的标记,如:
b[1,1].Tag == b[1,2].Tag ? ...<do st>... : ....<do st>...
答案 0 :(得分:0)
这更像是一个冗长的澄清而不是一个确定的答案,但它可能会揭示你真正试图做的事情:
在您显示的代码b
中(可能)是单个Button
,而不是按钮的数组。你的意思是:
_button[1,1].Tag == _button[1,2].Tag ? ...<do st>... : ....<do st>...
或者您是否尝试将b
(事件发件人)与数组中的相对于的按钮进行比较?
答案 1 :(得分:0)
如果您需要在数组中找到控件的位置,请考虑将Control.Tag设置为该位置而不是搜索:
_button[i, j].Tag = new System.Drawing.Point{ X = j, Y = i};
而不只是搜索
Point position = (Point)((Button)sender).Tag;
或者,如果您需要更多信息(例如Position + 0 / x /空选择) - 请使用自定义类来保存您需要的所有信息:
enum CellState { Empty, Player1, Player2 };
class TicTacToeCell
{
public Point Position {get;set;}
public CellState State {get;set;}
}
现在,当你有位置和状态时 - 使用_buttons
数组来索引访问其他的:
检查同一行:
Point position = (Point)((Button)sender).Tag;
int player1CountInThisRow = 0;
for (var col = 0; col < 3; col++)
{
if (((TicTacToeCell)(_button[position.Y, col].Tag).State == CellState.Player1)
{
player1CountInThisRow ++;
}
}