Winforms 控制控件

问题描述

我想不出一个连贯的搜索词来解决我的问题,所以如果之前有人问过这个问题,请原谅我。

我在面板控件上有 24 个组合框,显示为 4 行,每行 6 个。

用户定义每个组合的值并点击“开始”按钮后,我将所有组合框添加到列表中,以便我可以在程序的另一部分使用这些值。

问题是组合框添加到列表中的顺序与面板上的视觉布局相比是混乱的,我想定义顺序。目前,它首先将第 9 个组合框添加到列表中,然后是第 20 个、第 2 个、第 16 个等。

我试过 TabIndex 但没用。

在我手动重命名和重新标记所有框之前,我们将不胜感激地收到任何其他建议。

解决方法

表单的控件存在于容器控件的 Controls 集合中,例如,当您向表单添加一个面板和一个按钮,向面板添加两个组合框时,则:

  • Form.Controls 包含 button1 和 panel1
  • Panel.Controls 包含 comboBox1 和 comboBox2

控件添加到 Controls 集合中,其顺序与您将它们添加到设计器中的顺序相同。打开designer.cs,看InitializeComponent的末尾看顺序。 您还可以使用 Document Outline 窗口查看/更改顺序。

也就是说,现在很明显 panel1.Controls.OfType<ComboBox>() 返回的组合框的顺序与您在 文档大纲 中看到的顺序相同(或基于它们的 z-index,并且它不与他们的 x/y 位置没有任何关系)。

您可能希望根据 TabIndex 或您喜欢的任何其他属性对它们进行排序:

panel1.Controls.OfType<ComboBox>().OrderBy(x=>x.TabIndex)    

注意

一般来说,如果您打算使用这些值进行搜索,而不是依赖于值的顺序,更好的主意是创建一个 SearchModel 类,它具有一些属性,设置这些属性到相应组合框的选定值(手动或使用数据绑定),然后将搜索模型传递给其他类。