问题添加控件到面板在winform

问题描述 投票:0回答:2

我创建了我的游戏棋盘。我有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个按钮。所以,主要的问题是什么?

c# winforms
2个回答
0
投票

我可以看到你已经有了tmpRedSquare,tmpBlueSquare,tmpGreenSquare和tmpYellowSquare的一个实例,它似乎是你期待的情况下,在面板中多次出现。好吧,这不是它是如何工作的,你需要创建的每个要添加的预期Button的新实例的时间,并提供给pnlChessBoard.Controls.Add()方法。

我建议你创建负责创建这些按钮(如CreateRedSquare()CreateBlueSquare()等)时,他们被称为一个新的实例方法,然后使用返回的实例,而不是:

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

此外,你将不得不重新考虑周围的按钮的位置,你的逻辑,当它添加到面板。


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 );
    }
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.