C# - 如何访问数组对象的属性?

时间:2014-05-29 15:58:09

标签: c# windows-phone-8

我不知道如何清楚地表现出来,所以: 示例 - 我创建了一个按钮数组,如下所示:

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>...

2 个答案:

答案 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 ++;
   }
}