【问题标题】:Winforms controlling controlsWinforms控制控件
【发布时间】:2021-01-30 16:55:53
【问题描述】:

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

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

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

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

我尝试了 TabIndex,但没有成功。

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

【问题讨论】:

  • 我将所有组合框添加到列表中 ← 如何? (您已将它们添加到列表中,因此您已经定义了它们在列表中的顺序。)
  • 我将所有组合框添加到列表中,这样我就可以在程序的另一部分中使用这些值。 ← 您想使用值进行搜索,对吗?所以你只需要在列表中有值。更好的选择是拥有一个 SearchModel,它具有一些属性,并将这些组合框绑定到您的搜索模型,并将搜索模型传递给其他类。
  • 私有字符串 GetComboBoxValues() { List comboBoxes = panel1.Controls.OfType().ToList();字符串_values =“”; if(comboBoxes.Count != 0) { foreach (comboBoxes 中的 ComboBox cb) { _values += cb.SelectedValue + ","; } _values = _values.Remove(_values.Length - 1); } else { MessageBox.Show("no"); } 返回_值; }
  • 请将代码添加到问题中。

标签: list winforms combobox controls


【解决方案1】:

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

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

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

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

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

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

注意

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

【讨论】:

  • 感谢您抽出宝贵时间提供如此出色、详细的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2011-02-10
  • 1970-01-01
相关资源
最近更新 更多