Как я могу получить доступ к моей таблице Grid из моего частного метода - PullRequest
0 голосов
/ 22 февраля 2020

Вчера я запустил новый проект в c# с WPF. Мой первый раз с ним.

Я пытаюсь сделать игру tictactoe с графическим интерфейсом, поэтому я создаю сетку и использую бутоны для изменения состояния (это еще не окончательно sh).

Вот объявление класса:

    public partial class juego : Window
    {
        private juego tab;
        public juego( int size)
        {
            InitializeComponent();
            this.tab = CreateDynamicWPFGrid(size);
         }

Вот метод, который создал сетку.

    public juego CreateDynamicWPFGrid(int size)
    {
        Grid DynamicGrid = new Grid();
        DynamicGrid.Name = "GridTablero";
        DynamicGrid.Width = 400;
        DynamicGrid.HorizontalAlignment = HorizontalAlignment.Left;
        DynamicGrid.VerticalAlignment = VerticalAlignment.Top;
        DynamicGrid.ShowGridLines = true;
        DynamicGrid.Background = new SolidColorBrush(Colors.LightSteelBlue);
       for (int i = 0; i < size; i++)
        {
            ColumnDefinition gridCol1 = new ColumnDefinition();
            DynamicGrid.ColumnDefinitions.Add(gridCol1);
            RowDefinition gridRow1 = new RowDefinition();
            gridRow1.Height = new GridLength(45);
            DynamicGrid.RowDefinitions.Add(gridRow1);
        }
        for (int fila = 0; fila < DynamicGrid.RowDefinitions.Count; fila++)
        {
            for (int columna = 0; columna < DynamicGrid.RowDefinitions.Count; columna++)
            {
                System.Windows.Controls.Button newBtn = new Button();
                newBtn.Content = fila.ToString() + "_" + columna.ToString();
                newBtn.Name = "Button" + fila.ToString() + "_" + columna.ToString();
                newBtn.SetValue(Grid.ColumnProperty, columna);
                newBtn.SetValue(Grid.RowProperty, fila);
                newBtn.Click += new RoutedEventHandler(button_Click);
                DynamicGrid.Children.Add(newBtn);
            }

        }
        tablero.Content = DynamicGrid;
        return tablero;
    }

Итак, я хочу повторить по сетке, а затем посчитайте кнопки, содержание которых означает, являются ли они X, O или белыми.

Я пытался использовать в своем частном методе что-то вроде tab.Content, но я действительно понятия не имею. В любом случае, я хотел бы знать, возможно ли это.

1 Ответ

0 голосов
/ 24 февраля 2020

В конце концов, я придумала решение от myselft.

Итак, я изменила некоторые строки в классе.

public partial class juego : Window
{
    private ArrayList jugadores;

    public juego(ArrayList jugadores, int size)
    {
        InitializeComponent();



        tablero.Content = CreateDynamicWPFGrid(size);

}

Затем я изменила возврат из CreateDynamicWPFGrid:

return dynamicGrid;

И затем, один метод, который я вызываю, когда нажимаю на кнопки.

        Grid boardValidar = tablero.Content as Grid;


        Button[,] botones = new Button[boardValidar.ColumnDefinitions.Count, boardValidar.ColumnDefinitions.Count];

        var buttons = boardValidar.Children.Cast<Button>();

        for (int i = 0; i < boardValidar.ColumnDefinitions.Count; i++)
        {
            for (int j = 0; j < boardValidar.RowDefinitions.Count; j++)
            {
                botones[i, j] = buttons.Where(x => Grid.GetRow(x) == j && Grid.GetColumn(x) == i).FirstOrDefault();

            }
        }

Итак, я разрабатываю сетку, а затем делаю то же самое со всеми кнопками. После этого я использую linq, чтобы поместить в массив, и это все. Я знаю, что мой код не самый лучший, но я получил то, что хотел.

...