Проблема с добавлением элементов управления в панель в WinForm - PullRequest
0 голосов
/ 04 февраля 2019

Я создаю шахматную доску для своей игры.У меня 64 кнопки, по некоторым причинам я просто могу добавить 4 кнопки в панель.Это мой код

for (int i = 0; i < 16; i++)
        {
            for (int t = 0; t < 4; t++)
            {
                if (t == 0)
                {
                    Button RedSquare = tmpRedSquare;
                    square[t, i] = RedSquare;
                }
                else if (t == 1)
                {
                    Button BlueSquare = tmpBlueSquare;
                    square[t, i] = BlueSquare;
                }
                else if (t == 2)
                {
                    Button GreenSquare = tmpGreenSquare;
                    square[t, i] = GreenSquare;
                }
                else if (t == 3)
                {
                    Button YellowSquare = tmpYellowSquare;
                    square[t, i] = YellowSquare;
                }
                pnlChessBoard.Controls.Add(square[t, i]);
            }
            tmpRedSquare.Location = new Point(tmpRedSquare.Location.X, tmpRedSquare.Location.Y + Constant.SquareMiddleSpace);
            tmpBlueSquare.Location = new Point(tmpBlueSquare.Location.X + Constant.SquareMiddleSpace, tmpBlueSquare.Location.Y);
            tmpGreenSquare.Location = new Point(tmpBlueSquare.Location.X, tmpBlueSquare.Location.Y - Constant.SquareMiddleSpace);
            tmpYellowSquare.Location = new Point(tmpYellowSquare.Location.X - Constant.SquareMiddleSpace, tmpYellowSquare.Location.Y);
        }

Я ожидал, что результат будет 64 кнопки на форме.В результате я просто вижу 4 кнопки (первые 4 кнопки при выполнении), отлаживаю и понимаю, что панель просто содержит 4 элемента управления после выполнения программы.Код всегда проходит через команду, и это также проблема:

pnlChessBoard.Controls.Add(square[t, i]);

Я не знал, как панель не добавила другие 62 кнопки.Так в чем же главная проблема?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

У вас всего 4 кнопки.Вам необходимо создать new Button().Вот мой пример кода.Возможно, вам придется рассчитать обратно X и Y в соответствии с вашим дизайном.Надеюсь, что это работает.

public Button CreateBtnRedSqure()
{
    Button b = new Button();
    b.BackColor = Color.Red;
    .....
    .....
    return b;
}

    int Y = 0;
    for (int i = 0; i < 16; i++)
    {
        int X = 0;
        for (int t = 0; t < 4; t++)
        {
            if (t == 0)
            {
                Button RedSquare = CreateBtnRedSqure();
                RedSquare.Location = new Point(X, Y + Constant.SquareMiddleSpace);
                square[t, i] = RedSquare;
            }
            else if (t == 1)
            {
                Button BlueSquare = CreateBtnBlueSqure();
                BlueSquare = new Point(X, Y + Constant.SquareMiddleSpace);
                square[t, i] = BlueSquare;
            }
            else if (t == 2)
            {
                Button GreenSquare = CreateBtnGreenSqure();
                GreenSquare = new Point(X, Y + Constant.SquareMiddleSpace);
                square[t, i] = GreenSquare;
            }
            else if (t == 3)
            {
                Button YellowSquare = CreateBtnYellowSqure();
                YellowSquare = new Point(X, Y + Constant.SquareMiddleSpace);
                square[t, i] = YellowSquare;
            }
            pnlChessBoard.Controls.Add(square[t, i]);
            X = X + (*width of your btn size)
        }
            Y = Y + (* height of your btn size );
    }
0 голосов
/ 04 февраля 2019

Я вижу, что у вас уже есть экземпляр tmpRedSquare, tmpBlueSquare, tmpGreenSquare и tmpYellowSquare, и кажется, что вы ожидаете, что эти экземпляры будут появляться несколько раз на вашей панели.Ну, это не так, вам нужно каждый раз создавать новый экземпляр ожидаемого Button и добавлять его в метод pnlChessBoard.Controls.Add().

Я рекомендую вам создавать методы, отвечающие засоздать новый экземпляр этих кнопок (например, CreateRedSquare(), CreateBlueSquare() и т. д.) при их вызове, а затем использовать вместо этого возвращенный экземпляр:

if (t == 0)
{
      Button RedSquare = CreateRedSquare();
      square[t, i] = RedSquare;
}
...

Кроме того, вам придется переосмыслить свойлогика вокруг расположения кнопки при ее добавлении на панель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...