首页 > 解决方案 > Winforms控制控件

问题描述

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

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

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

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

我尝试了 TabIndex,但没有奏效。

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

标签: listwinformscomboboxcontrols

解决方案


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

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

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

也就是说,现在应该很明显panel1.Controls.OfType<ComboBox>()返回组合框的顺序与您在Document Outline中看到的顺序相同(或基于它们的 z-index,并且与它们的 x/y 位置无关)。

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

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

笔记

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


推荐阅读