我没有要显示的代码,因为这是一个问题,我不理解VS2015中使用C#的设计器的行为。我在面板中添加了一系列标签,因此我可以在代码中迭代它们。问题是,无论我向面板添加标签的顺序如何,控件的索引都没有意义。
这是一个截屏。右侧的背面彩色标签全部包含在单独的面板中。我已经对标签进行了编码,以便在面板容器中显示它们的索引。
这些是自下而上一次添加的。如何手动添加标签并仍具有可预测的索引?
感谢任何帮助。
这是在使标签尺寸相同,重命名为lbl0,lbl1等并从上到下一次添加一个之后的结果....
答案 0 :(得分:1)
如果查看Form.Designer.cs文件(表格的类定义的一部分),您可以看到控件集合中添加了控件的位置。
在这里,您将看到一个以// Form
开头的部分,然后您将看到它调用的地方`this.Controls.Add();
此列表中的项目按照您将其放入表单的顺序显示(至少对我来说是这样)。我只是将10个标签复制/粘贴到表格上,我看到了:
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 684);
this.Controls.Add(this.label10);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
在运行时,控件可以在集合中找到,就像您在阅读上面的代码时所期望的那样;添加的最后一个控件位于索引[0]
:
现在,添加一个面板的情况略有不同,但并不多。由于Panel
是容器对象,因此标签会添加到Panel
控件集合中:
//
// panel1
//
this.panel1.Controls.Add(this.label18);
this.panel1.Controls.Add(this.label17);
this.panel1.Controls.Add(this.label16);
this.panel1.Controls.Add(this.label15);
this.panel1.Controls.Add(this.label14);
this.panel1.Controls.Add(this.label13);
this.panel1.Controls.Add(this.label12);
this.panel1.Controls.Add(this.label11);
this.panel1.Location = new System.Drawing.Point(37, 366);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(200, 172);
this.panel1.TabIndex = 13;
但请注意,行为是相同的。最近的控件首先添加到Controls
集合中,并且位于Panel.Controls[0]
位置。