表单设计器中的组件数组
Posted
技术标签:
【中文标题】表单设计器中的组件数组【英文标题】:Array of Components in Forms Designer 【发布时间】:2012-05-09 18:57:57 【问题描述】:在 Windows 窗体设计器中是否有任何好的方法来定义类似组件的数组(或其他集合)?您可以检查“GenerateMember”,它将在代码中为您提供一个唯一的命名成员以供参考,但是如果我希望该生成的成员成为某种列表之一,以便我可以轻松地遍历它们怎么办?我能想到的唯一方法是在加载时创建一个新列表,然后手动将所有已经生成的成员添加到该列表中,这既乏味又多余。我考虑过编辑生成这些组件的代码,但它在自动生成的“请勿修改”部分内,我担心我在那里所做的任何更改都会在我对表单进行其他更改时被覆盖。表单设计器是否没有此功能?
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,您可以简单地将“this”(表单)转换为“Control”,然后检查它的“ControlCollection”属性 - 一个包含表单控件的集合。例如。
public partial class Form1 : Form
public Form1()
InitializeComponent();
var myControlList = ((Control)this).Controls;
除非我遗漏了什么……
【讨论】:
嗯,这个炒锅,但它似乎有点 hackish - 首先我必须投射容器(不是“this”,而是这里的 TableLayoutPanel),然后我必须投射每个元素(在这种情况下它们是图片框)当涉及到这么多类型转换时,我总是感到很奇怪,似乎有点“不安全”,就像我应该对所有内容进行空检查以确定,但如果这是唯一的方法做吧,我想没关系。 请记住,强制转换与“转换”不同——它只是获取对现有接口的引用,因此性能不是问题。但我不太明白为什么你仍然需要一个数组?你可以迭代容器的孩子吗?我可能需要查看一些代码才能更好地了解您要完成的工作。 它实际上嵌套了好几层——表中的表中的表,在这种情况下我只关心最深的层。我已经进行了重构,现在我手动创建它们,而不是在表单设计器中预先制作 90 个图片框。 (该列表变得有些笨拙。)似乎我仍在复制很多引用以达到该级别,这在某种程度上似乎是错误的(来自您必须管理自己的内存的 C/C++ 工作流程)。每个可能只有 4 个字节,但它似乎仍然有点低效。 如果我们谈论的是内存,90 个指针不算什么。另一方面,90 个 PictureBox 是很多的! :)【参考方案2】:您可以将它们放在面板中,然后遍历其控件。
【讨论】:
以上是关于表单设计器中的组件数组的主要内容,如果未能解决你的问题,请参考以下文章
在设计器中为 winforms 应用程序打开的表单的运行上下文是啥