C# 如何在For循环内创建标签 private ArrayList label=新的ArrayList(30); Label Label_class=新标签(); 随机r=新随机(); for(int i=0;i

C# 如何在For循环内创建标签 private ArrayList label=新的ArrayList(30); Label Label_class=新标签(); 随机r=新随机(); for(int i=0;i,c#,C#,此for循环位于Form1\u Load内,以便在加载表单时运行。。 问题是,当我中断点时,我看到forloop中的代码没有被中断点注意到/没有运行。这是为什么??如何在form1(窗口窗体)行中随机创建多个标签 private ArrayList label= new ArrayList(30); Label label_class = new Label(); Random r = new Random(); for (int i = 0; i < label.Count; i++

此for循环位于
Form1\u Load
内,以便在加载表单时运行。。 问题是,当我中断点时,我看到forloop中的代码没有被中断点注意到/没有运行。这是为什么??如何在
form1(窗口窗体)
行中随机创建多个标签

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();
}
不创建包含30项的ArrayList。它构造了一个初始容量为30的ArrayList,但仍然没有项(请参见文档)。
for
循环未运行,因为
label.Count
为零

考虑将其更改为

private ArrayList label= new ArrayList(30);
private ArrayList label= new ArrayList(30);
private ArrayList label=new ArrayList();
对于(inti=0;i<30;i++)标签。添加(新标签(…);

接下来是代码的其余部分。

这里有两个问题:

  • 为什么断点没有被命中
  • 这个代码行得通吗
  • 首先,更改代码,而不是使用ArrayList

    private ArrayList label = new ArrayList();
    for (int i = 0; i < 30; i++) label.Add(new Label(...));
    
    私有列表标签=新列表();
    
    你可以阻止到处都是丑陋的演员。您需要更改标签。计数也改为30

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

    确保您正在使用调试生成。请查看以下内容: 另请参阅我的博客,查看在告诉VS加载您的PDB文件一节中是否加载了符号(如果clean等不适用于您的解决方案,但它应该!)

    这个问题正在讨论中

    private List<Label> label= new List<Label>();
    
    这将创建一个大小为30的
    ArrayList
    ,而不是一个包含30个元素的列表

    如果你这样做

    private ArrayList label= new ArrayList(30);
    
    private ArrayList label= new ArrayList(30);
    
    列表标签=新列表();
    对于(int i=0;i<30;i++){
    var temp=新标签();
    温度位置=新点(右下一个(ClientRectangle.Right-10),
    r、 接下来(ClientRectangle.Bottom-10));
    temp.Text=“o”;
    temp.Click+=新事件处理程序(Form1_Load);
    temp.BackColor=System.Drawing.Color.White;
    此.Controls.Add(temp);
    temp.Show();
    标签。添加(临时)
    }
    
    它应该会起作用


    此外,请注意我使用的是
    List
    而不是
    ArrayList
    ,在某些情况下,您希望能够指定要取出的对象,但通常(在本例中)指定类型的通用表单会确保您做得更好。您将不需要执行所有正在执行的装箱操作,您将编写更少的代码行,所有这些代码都将更具可读性。

    忘记提出问题了。。。。私有ArrayList标签=新ArrayList(30);分数=新分数();Label Label_class=新标签();随机r=新随机();编辑您的问题并将代码放入其中。。。然后单击{}按钮以正确格式化代码。什么是var??无论如何,它起作用了!现在我来弄清楚它是怎么工作的!塔克斯·马门!嗯,我怎样才能使所有标签的背景色都变成白色?我正在尝试制作一款没有AI鬼魂的吃豆人游戏,这是C#3.0中添加的一项功能,它允许编译器为您确定变量的类型,而不是您指定它。当类型很明显时,比如在本例中,它有助于使代码可读性和可扩展性