和标题一样,我的问题是C#如何在foreach循环中迭代表单控件?如果这有点模糊,我将添加一些更多的细节:
当我做foreach(Control c in MyForm)时,它如何索引(?)通过控制?是基于标签订单还是其他什么的?任何帮助都将不胜感激,因为我正在试图找出,我是否可以把一个数组的值以更整洁和更有组织的方式。
发布于 2016-11-15 21:41:26
foreach的工作方式总是一样的,所以在窗体的控件上执行它不会改变任何事情。
它也没有真正使用索引;foreach只适用于实现IEnumerable的类实例,这意味着它们有一个GetEnumerator方法。foreach使用返回的IEnumerator一次一个地遍历集合;order取决于实际的实现。
对于List (或任何数组),这是有序的(即索引0是第一,1秒,等等);对于IEnumerable的随机实现,您必须查看源代码。在您的特定示例中,查看Controls集合在Form上的类型。它是一个ControlCollection,所以您需要查看参考源来了解它是如何枚举的。
基于实现,它似乎是有序的,在枚举过程中消除了一些防止控件的安全措施。
发布于 2016-11-15 22:12:30
您是指控件被迭代的顺序吗?我想说的是,这些控件是按照将它们添加到窗体的控件集合的顺序进行迭代的。您可以在InitializeComponents designer方法中检查这一点,以查看控件在该方法中列出的顺序。
https://stackoverflow.com/questions/40620107
复制相似问题