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)
答案 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)
这里真的有两个问题:
首先,更改代码而不是使用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