简体   繁体   中英

C# - How to access property of an array object?

I dont know how to show clearly, so: Example - I create an array of button like this:

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

Now how can I compare the Tag of 2 buttons in that array like:

b[1,1].Tag == b[1,2].Tag ? ...<do st>... : ....<do st>...

This is more of a long-winded clarification than a definite answer, but it may uncover what you're really trying to do:

In the code that you show b is (presumably) a single Button , not an array of buttons. Do you mean:

_button[1,1].Tag == _button[1,2].Tag ? ...<do st>... : ....<do st>...

Or are you trying to compare b (the event sender) to a button relative to it in the array?

If you need to find position of control in array consider to set Control.Tag to that position instead of search:

 _button[i, j].Tag = new System.Drawing.Point{ X = j, Y = i};

And instead of searching just

 Point position = (Point)((Button)sender).Tag;

Or if you need more information (like Position + 0/x/empty choice you have) - have custom class to hold all information you need:

 enum CellState { Empty, Player1, Player2 };
 class TicTacToeCell
 {
      public Point Position {get;set;}
      public CellState State {get;set;}
 }

Now when you have position and state - use _buttons array to index access other ones:

Check same row:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM