【发布时间】:2016-10-20 05:09:09
【问题描述】:
我目前正在尝试编写我认为将是一个简单的游戏,因为我已经在非图形环境 (c++) 中完成了它。现在我试图在 c# winform 中重新编程。在我的第一个表单中,用户输入要在 1 到 10 的范围内玩多少玩家。根据用户在第一个表单上的输入,确定在我的第二个表单上将填充多少标签和文本框。
在加载时填充文本框的第二个表单上,我试图将用户或用户放入一个或多个文本框的名称并将它们存储到一个数组中,我可以传递给我的下一个表单并使用轮到播放时显示用户名。
private void playerNames_Load(object sender, EventArgs e)
{
string myOnload = null;
if (myOnload == null)
{
TextBox[] textBox = new TextBox[numPlayers];
Label[] label = new Label[numPlayers];
int labelX, labelY, textboxX, textboxY;
labelX = 20;
labelY = 22;
textboxX = 70;
textboxY = 20;
for (int i = 0; i < numPlayers; i++)
{
int labelCTR = i + 1;
textBox[i] = new TextBox();
textBox[i].Name = "player" + i;
textBox[i].Text = "";
textBox[i].Location = new Point(textboxX, textboxY);
label[i] = new Label();
label[i].Name = "player" + i;
label[i].Text = "Player " + labelCTR;
label[i].Location = new Point(labelX, labelY);
labelY += 25;
textboxY += 25;
}
for (int i = 0; i < numPlayers; i++)
{
this.Controls.Add(textBox[i]);
this.Controls.Add(label[i]);
}
}
}
上面的代码是我如何让表单根据用户输入的 numPlayers 变量的值填充文本框。
private void submitPlayers_Click(object sender, EventArgs e)
{
string[] name = new string[numPlayers];
//List<string> name = new List<string>();
for (int i = 0; i < numPlayers; i++)
{
TextBox[] textBox = new TextBox[numPlayers];
//name[i] = textBox[i].Text; // first try and fail
name[i] += textBox[i].Text; // my code currently crashes here
//name.Add(textBox[i].Text); // it also crashes here if i try to switch from array to list
for (i = 0; i < numPlayers; i++)
{
int m = i+1;
MessageBox.Show("Player " + m + " " + name[i], "testing");
}
}
上面的代码是我试图将文本框转储到一个数组中的地方,以便我可以将它们存储起来以供以后在我的下一个表单中使用。我在最后添加了 messageBox 以尝试通过使其每个 messageBox 转储一个名称来测试数组,直到所有名称都已成功转储。当我终于让它工作时,带有 messageBox 的 for 循环将被替换为打开我的下一个表单并将名称数组传递给它的代码。因此,每个玩家回合都会在表格的标题栏中使用他们的名字更加个性化。
【问题讨论】:
-
可以使用文本框列表,更简单。