在运行时向表单添加C#标签

我正在尝试用C#制作一个简单的基于文本的游戏。 我想要实现这一点是通过向表单添加标签(而不是使用命令提示符)。 我在将它们添加到屏幕时遇到了一些麻烦。 Visual Studio提供了一个未指定的错误(仅表示我有一个未处理的exception):

你调用的对象是空的

当我尝试使用数组用这些标签填充屏幕时。 代码:

private void Main_Game_Load(object sender, EventArgs e) { Label[] Enemies = new Label[20]; Label[] Projectile = new Label[5]; Font font = new Font(new System.Drawing.FontFamily("Microsoft Sans Serif"), 12); Random rand = new Random(); Point point = new Point(rand.Next(500), rand.Next(500)); for (int i = 0; i < Enemies.Length; i++) { Enemies[i].Text = "E"; Enemies[i].Font = font; Enemies[i].BackColor = ColorTranslator.FromHtml("#000000"); Enemies[i].Location = point; Enemies[i].Size = new Size(12, 12); Enemies[i].Name = "Enemy"+i.ToString(); this.Controls.Add(Enemies[i]); } } 

我想知道问题可能隐藏在哪里? 我用谷歌搜索它,我的代码似乎应该工作(除了现在点不会随机尝试填充)。

这行代码创建一个空数组(即每个引用任何内容的元素),最多可存储20个标签:

 Label[] Enemies = new Label[20]; 

您必须显式创建数组中的每个标签:

 for (int i = 0; i < Enemies.Length; i++) { //creates a new label and stores a reference to it into i element of the array Enemies[i] = new Label(); //... } 

从单维数组(C#编程指南) :

 SomeType[] array4 = new SomeType[10]; 

此语句的结果取决于SomeType是值类型还是引用类型。 如果它是值类型,则语句将创建一个包含10个元素的数组,每个元素都具有SomeType类型。 如果SomeType是引用类型,则该语句将创建一个包含10个元素的数组,每个元素都初始化为空引用。

创建数组时,将使用该类型的默认值填充所有元素。 对于所有为null引用类型。 您需要为数组中的每个项目实际创建一个新Label

 for (int i = 0; i < Enemies.Length; i++) { Enemies[i] = new Label(); //...