在WinForm中向面板添加控件的问题

时间:2019-02-04 02:19:14

标签: c# winforms

我正在为我的游戏创建一个棋盘。我有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 :(得分:0)

我可以看到您已经有一个tmpRedSquare,tmpBlueSquare,tmpGreenSquare和tmpYellowSquare实例,并且您似乎希望这些实例在面板中出现多次。嗯,这不是它的工作原理,您需要每次创建一个要添加的预期Button的新实例,并将其提供给pnlChessBoard.Controls.Add()方法。

我建议您创建一种方法,在调用这些按钮时负责创建这些按钮的新实例(例如CreateRedSquare()CreateBlueSquare()等),然后改用返回的实例:

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

此外,将按钮添加到面板后,您还必须重新考虑按钮位置的逻辑。

答案 1 :(得分:0)

您仅使用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 );
    }