如何在For循环中创建标签

时间:2011-08-24 05:05:20

标签: c#

private ArrayList label= new ArrayList(30);

Label label_class = new Label();
Random r = new Random();

for (int i = 0; i < label.Count; i++) {
    ((Label)label[i]).Location = new Point(r.Next(ClientRectangle.Right -10),
                                           r.Next(ClientRectangle.Bottom - 10));
    ((Label)label[i]).Text = "o";
    ((Label)label[i]).Click += new EventHandler(Form1_Load);

    this.Controls.Add((Label)label[i]);

    ((Label)label[i]).Show();
}

这个for循环位于Form1_Load内部,因此它将在表单加载时运行。 问题是,当我断点时,我看到forloop中的代码没有被断点注意到/没有运行。这是为什么??以及如何创建随机放置在form1(window form)

上的许多标签

3 个答案:

答案 0 :(得分:4)

问题出在

private ArrayList label= new ArrayList(30);

这会创建一个大小为30的ArrayList,而不是一个包含30个元素的<{1}}。

如果您执行类似

的操作
List<Label> labels = new List<Label>();

for (int i = 0; i < 30; i++) {
    var temp = new Label();

    temp.Location = new Point(r.Next(ClientRectangle.Right -10),
                                       r.Next(ClientRectangle.Bottom - 10));
    temp.Text = "o";
    temp.Click += new EventHandler(Form1_Load);

    temp.BackColor = System.Drawing.Color.White;

    this.Controls.Add(temp);

    temp.Show();
    labels.Add(temp) 
}

它应该有用。

另外,请注意我使用List<Label>而不是ArrayList。在某些情况下,您可能希望能够指定您正在取出的对象但通常(在这种情况下)您指定类型的通用表单肯定会更好。你不需要做你正在做的所有拳击,你会写更少的代码行,所有这些代码都更具可读性。

答案 1 :(得分:1)

该行

private ArrayList label= new ArrayList(30);

不会创建包含30个项目的ArrayList。它构造一个初始容量为30的ArrayList,但仍然没有项目(参见文档here)。 for循环未运行,因为label.Count为零。

考虑将其更改为

private ArrayList label = new ArrayList();
for (int i = 0; i < 30; i++) label.Add(new Label(...));

接下来是你的其余代码。

答案 2 :(得分:1)

这里真的有两个问题:

  1. 为什么你的断点没有被击中
  2. 此代码是否有效。
  3. 首先,更改代码而不是使用ArrayList使用

    private List<Label> label= new List<Label>();
    

    你可以阻止整个地方的丑陋铸造。您还需要将label.Count更改为30。

    其次,没有被击中的断点几乎总是表示您的调试信息与代码不同步,或者调试器无法找到您的PDB(调试信息)文件。

    确保您使用的是调试版本。请查看以下内容: breakpoints in code behind not hit 另请参阅我的博客,检查是否在有关告诉VS加载PDB文件的部分中加载了符号(如果干净等不适用于您的解决方案,但它应该!)

    http://completedevelopment.blogspot.com/2009/11/debugging-in-gac-all-ways-to-accomplish.html