我正在为我的游戏创建一个棋盘。我有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个按钮。那么主要问题是什么?
答案 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 );
}