我创建了我的游戏棋盘。我有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个按钮。所以,主要的问题是什么?
我可以看到你已经有了tmpRedSquare,tmpBlueSquare,tmpGreenSquare和tmpYellowSquare的一个实例,它似乎是你期待的情况下,在面板中多次出现。好吧,这不是它是如何工作的,你需要创建的每个要添加的预期Button
的新实例的时间,并提供给pnlChessBoard.Controls.Add()
方法。
我建议你创建负责创建这些按钮(如CreateRedSquare()
,CreateBlueSquare()
等)时,他们被称为一个新的实例方法,然后使用返回的实例,而不是:
if (t == 0)
{
Button RedSquare = CreateRedSquare();
square[t, i] = RedSquare;
}
...
此外,你将不得不重新考虑周围的按钮的位置,你的逻辑,当它添加到面板。
你刚才用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 );
}