如何在 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)
上的标签
问题出在
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(...));
后跟代码的其余部分。
这里真的有两个问题:
- 为什么没有命中断点
- 这段代码会起作用吗?
首先,更改代码而不是使用 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