Winforms 控制控件

Winforms controlling controls

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

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

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

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

我尝试了 TabIndex,但没有用。

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

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

  • Form.Controls 包含按钮 1 和面板 1
  • Panel.Controls 包含 comboBox1 和 comboBox2

控件被添加到 Controls 集合,其顺序与您将它们添加到设计器的顺序相同。打开designer.cs,看InitializeComponent的最后看顺序。 您也可以 see/change 使用 window.

的顺序

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

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

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

备注

一般来说,如果您要使用这些值进行搜索,而不是依赖值的顺序,更好的办法是创建一个 SearchModel class属性,将这些属性设置为相应组合框的选定值(手动或使用数据绑定),然后将搜索模型传递给其他 classes.