C#-在运行时使用对在设计时添加到TableLayoutPanel的按钮的引用填充数据结构

C#-在运行时使用对在设计时添加到TableLayoutPanel的按钮的引用填充数据结构,c#,reference,button,tablelayoutpanel,data-structures,C#,Reference,Button,Tablelayoutpanel,Data Structures,我使用的是Visual C#2008快速版 如果在设计时我有一个表单[myMainForm], 我在其中添加了一个TabControl[myTabControl], 而myTabControl只有一个tabPage[myTabPage], 在这个选项卡页面中,我添加了一个tableLayoutPanel[myTableLayoutPanel], 在myTablelayoutPanel中,我添加了十个按钮(button1、button2、button3等) 在运行时,我想用我添加到myTableL

我使用的是Visual C#2008快速版

如果在设计时我有一个表单[myMainForm],
我在其中添加了一个TabControl[myTabControl],
而myTabControl只有一个tabPage[myTabPage],
在这个选项卡页面中,我添加了一个tableLayoutPanel[myTableLayoutPanel],
在myTablelayoutPanel中,我添加了十个按钮(button1、button2、button3等)

在运行时,我想用我添加到myTableLayoutPanel的所有十个按钮的引用填充数据结构。我想以最简单、最有效的方式处理对按钮的引用。for…next循环和阵列是否是解决此问题的最佳方法

我意识到我可以通过编程方式将按钮添加到面板中,但如果我这样做,我将不得不在代码中调整它们的视觉设置,我宁愿避免这样做,以保持代码尽可能干净和简单

如果有人能发几行代码让我继续做这件事,我将不胜感激

感谢您抽出时间阅读此文章。快乐编码

问候,

在C#3(VS 2008)中,您可以使用数组初始值设定项语法设置编译时数组:

var buttons = new [] { button1, button2, ... button10 };
或者,您可以在所有字段上进行反思,并沿着

using System.Linq;

// tlp being your TablelayoutPanel instance
var buttons = tlp.GetType().GetFields().Select(f => f.GetValue(tlp)).Where(v => v is Button).ToArray();

这将获取所有按钮——您可能需要添加一个
Where(f=>SomeTestOn(f.Name))
之前过滤如果你想过滤掉那些字段,除了一些已知的命名模式表明它们是你真正想要的按钮之外,请选择

那么你已经准备好通过
myTablelayoutPanel
的子控件使用循环了吗?你希望找到更好的选择,是吗?谢谢,好的-你是对的。例如,我可以通过执行以下操作来获取按钮上显示的文本:myStrings[0]=myTableLayoutPanel.GetControlFromPosition(1,1).text;这种方法的问题是我需要传递每个按钮的坐标。是否有方法将对象myTablelayoutPanel本身作为参数传递给某个数据结构,以便用面板上包含的按钮的引用填充所述结构?