【问题标题】:Get All Controls in a Panel from Up-to-Down从上到下获取面板中的所有控件
【发布时间】:2014-09-20 20:13:14
【问题描述】:

我正在编写代码来获取面板中的所有控件,例如:

       foreach (Control c in panel1.Controls)
        {
            MessageBox.Show(c.Name.ToString());
        }

是的,把所有的 Controls 还给我。 Top 控件(textBox1)的 TabIndex 为 0,自上而下递增(即 textBox2 在 textBox1 下方,textBox2 的 TabIndex 为 1。)

当我在 MessageBox 中运行此代码时,它首先返回 textBox2,然后返回 textBox1!

那么,这个选择的依据是什么(为什么计算机一开始会选择textbox2)?

我该如何解决这个问题?!

谢谢你

【问题讨论】:

  • 这取决于您在设计时如何添加它们
  • 您是否使用 Visual Studio 的 WinForms 设计器来创建您的表单?如果是这样,VS 将自动生成控件的代码,并且可能是在 textBox2 之后添加了 textBox1,这显然会导致 textBox2 在迭代中首先返回。此外,通过做一些研究,您可以了解Collections...

标签: c# winforms controls


【解决方案1】:

您需要的只是按 TabIndex 排序的控件列表。
Controls 属性按照控件添加到表单的顺序为您获取控件列表。 您只需按 TabIndex 对该列表进行排序。

Using System.Linq;

foreach (var item in panel1.Controls.OfType<Control>().OrderBy(ee=>ee.TabIndex))

【讨论】:

  • 您的代码有两个错误:实例参数:无法从 'System.Windows.Forms.Panel' 转换为 'System.Linq.ParallelQuery' 和 |||| “System.Windows.Forms.Panel”不包含“OfType”的定义,并且最佳扩展方法重载“System.Linq.Queryable.OfType(System.Linq.IQueryable)”有一些无效参数
【解决方案2】:

您也可以按控件的位置排序。通过获得积分。

它将您首先添加的文本框从上到下返回到控件。

【讨论】:

  • 与他们的位置无关
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多