C# 向面板添加控件时,C索引是不可预测的

C# 向面板添加控件时,C索引是不可预测的,c#,visual-studio-2015,C#,Visual Studio 2015,我没有代码可以显示,因为我不理解VS2015中使用C的设计器的行为,这是一个问题。我已经向面板添加了一系列标签,所以我可以在代码中迭代它们。问题是,似乎无论我将标签添加到面板的顺序如何,控件的索引都毫无意义 这是一个屏幕截图。右侧的背色标签都包含在单独的面板中。我对标签进行了编码,以在面板容器中显示它们的索引 从下往上一次添加一个。如何手动添加标签,并且仍然具有可预测的索引 感谢您的帮助 这是使标签大小相同、重命名为lbl0、lbl1等并从上到下一次添加一个标签后的结果 如果查看Form.Des

我没有代码可以显示,因为我不理解VS2015中使用C的设计器的行为,这是一个问题。我已经向面板添加了一系列标签,所以我可以在代码中迭代它们。问题是,似乎无论我将标签添加到面板的顺序如何,控件的索引都毫无意义

这是一个屏幕截图。右侧的背色标签都包含在单独的面板中。我对标签进行了编码,以在面板容器中显示它们的索引

从下往上一次添加一个。如何手动添加标签,并且仍然具有可预测的索引

感谢您的帮助

这是使标签大小相同、重命名为lbl0、lbl1等并从上到下一次添加一个标签后的结果


如果查看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]:

现在,添加一个面板是一个稍微不同的故事,但不多。由于面板是容器对象,标签将添加到面板控件集合:

// 
// 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;

但是,请注意,行为是相同的。最新的控件首先添加到控件集合中,并将位于面板中。控件[0]位置。

您在谈论哪个索引?TabIndex属性?请解释“不可预测索引”的问题。换句话说,对于那些需要精确索引的标签,你想做什么?你为什么关心索引?您应该为所需的控件指定一个名称,并使用该名称。我正在遍历一个与标签顺序相同的数据网格视图。我希望能够通过panel.Controls[I]而不是名称来引用标签。这可以正常工作,但我不知道如何将标签从0到7排序,因此将错误的值分配给了错误的标签。DataGridView控件的行具有Tag属性。您可以在其中放置相应标签的引用:dgv.Rows[0]。Tag=label1;我最初将控件与其他标签放在一个组框中,我添加了面板以分离我想要迭代的控件。很可能是他们最初添加到groupBox的顺序把我搞砸了。我没想到要检查设计器代码。。。我是一名学生,还在学习。这个解决方案会节省我很多时间。至少我现在明白了,谢谢!