如何在 For 循环中创建标签

本文关键字:创建 标签 循环 For | 更新日期: 2023-09-27 18:06:41

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)上的标签

如何在 For 循环中创建标签

问题出在

private ArrayList label= new ArrayList(30);

这将创建一个大小为 30 的ArrayList,而不是包含 30 个元素的。

如果你做类似的事情

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在某些情况下,您将希望能够指定要取出的对象,但通常(在这种情况下(您指定类型的通用表单将确保您更好。您将不需要执行所有正在执行的操作,并且将编写更少的代码行,所有这些代码都将更具可读性。

private ArrayList label= new ArrayList(30);

不会创建包含 30 个项目的数组列表。它构造一个初始容量为 30 的 ArrayList,但仍然没有项目(请参阅此处的文档(。for循环未运行,因为label.Count为零。

考虑将其更改为类似

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

后跟代码的其余部分。

这里真的有两个问题:

  1. 为什么没有命中断点
  2. 这段代码会起作用吗?

首先,更改代码而不是使用 ArrayList 使用

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

你可以到处阻止丑陋的投射。您需要更改标签。也算30。

其次,未命中断点几乎总是表明调试信息与代码不同步,或者调试器找不到 PDB(调试信息(文件。

确保使用的是调试版本。查看以下内容:代码后面的断点未命中另请参阅我的博客以检查是否在告诉VS加载PDB文件的部分中加载了符号(如果clean等不适用于您的解决方案,但它应该!

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