C#学习教程:C#中窗体的控件属性中的控件顺序这是我尝试过的方法,我在C#窗口应用程序的垂直条中从左到右添加了7个FlowLayoutPanel。然后我再次将流布局标记为从左到右的1,2,3,...7。现在,在表单的加载处理程序中,我编写了以下代码片段,我希望消息以1,2,...7开头并按顺序出现。但是我以相反的顺序得到它(7,6,...)。有人可以帮我解决我做错的事吗?保持顺序背后的原因是,我试图用每一行代表一天来做一个日历控件。如果一个月从星期三开始,那么我需要在第一行(星期一)和第二行(星期二)添加一个空标签。所以顺序有点重要请参阅将它们添加到yourForm.designer.cs中的表单的顺序我知道这是一个老问题但是......你可能想使用SetChildIndex。例如this.Controls.SetChildIndex(button1,0);如果您查看由设计器Form1.designer.cs生成的代码,它将如下所示:////Form1//this.AutoScaleDimensions=newSystem.Drawing。尺码F(6F,13F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=newSystem.Drawing.Size(658,160);this.Controls.Add(this.flowLayoutPanel7);这。Controls.Add(this.flowLayoutPanel6);this.Controls.Add(this.flowLayoutPanel5);this.Controls.Add(this.flowLayoutPanel4);this.Controls.Add(this.flowLayoutPanel3);this.Controls.Add(this.flowLayoutPanel2);this.Controls.Add(this.flowLayoutPanel1);this.Name="Form1";this.Text="Form1";这个.ResumeLayout(false);请注意它是如何构建的,您首先添加面板1,然后添加面板1,然后添加面板2,依此类推,但是当代码运行时,它会添加7,然后添加6。此代码将位于设计人员生成的InitializeComponent()函数中。为什么需要它们以特定顺序运行?我不会依赖设计器来保持您想要的顺序。我会自动对控件进行排序:varflowpanelinOrder=fromninthis.Controls.Cast()其中n是Fl??owLayoutPanelorderbyint.Parse(n.Tag.ToString())选择n;/*非linqListflowpanelinOrder=newList();foreach(controlcinthis.Controls){if(cisFlowLayoutPanel)flowpanelinOrder.Add(c);}flowpanelinOrder.Sort();**/foreach(FlowLayoutPanelaDaysControlinflowpanelinOrder){MessageBox.Show(aDaysControl.Tag.ToString());如果将来某个其他设计者删除该控件,又将其添加回来等等怎么办?检查设计师总是一团糟。更好的方法是在枚举之前对容器控件中的控件进行排序。我使用这个扩展方法(如果你有Linq):publicstaticListToControlsSorted(thisControlpanel){controls.Sort((c1,c2)=>c1.TabIndex.CompareTo(c2.TabIndex));返回控制;你可以:foreach(FlowLayoutPanelaDaysControlinthis.ToControlsSorted()){}(上面的TabIndex)。根据Tag从那里进行排序是微不足道的。这真的是个问题吗?只要UI行为正确(例如Tab键顺序),我建议您不要对它们的枚举顺序做出任何假设。编辑:感谢您更详细地解释您的要求。我想我仍然建议不要按照它们存储在Controls集合中的顺序。最好将这些实现细节视为“不透明”。您有一个与每个控件关联的标签,因此您可以使用它来识别正确的控件。为了加快速度,您可以构建一个7元素数组,按顺序引用控件:FlowLayoutPanel[]panels=newFlowLayoutPanel[7];foreach(this.Controls中的FlowLayoutPanel面板){panels[(int)panel.Tag]=panel;}//现在,您可以直接通过下标引用面板:panels[2].BackColor=Color.Aquamarine;尽管我会做一些类型检查以使这段代码更健壮!以上就是C#学习教程的全部内容:C#中窗体的Control属性中控件的顺序。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,并不代表侵权,如有侵权,请点击右边联系管理员删除。如需转载请注明出处:
