开发者

C# - Populate Data Structure At Runtime With References To Buttons Added To TableLayoutPanel At Design Time

I am using Visual C# 2008 Express edition.

If at design time I have a form [myMainForm],

to which I have added a TabControl [myTabControl],

and myTabControl has a single tabPage [myTabPage],

and to this tabPage I have added a tableLayoutPanel [myTableLayoutPanel],

and to myTablelayoutPanel I have added ten buttons (button1, button2, button3, etc).

At runtime I want to populate a data structure with references to all the ten buttons I have added to myTableLayoutPanel. I want to work with the references to the buttons in the simplest, most efficient way possible. Is a for.开发者_开发技巧..next loop in conjunction with an array the best approach to tackle the problem?

I realise that I could add the buttons programmatically to the panel, but if I do that I will have to tweak their visual settings in code as well which I would rather avoid in order to keep my code as clean and simple as possible.

If someone could post a few lines of code to get me going on this I'd be grateful.

Thanks for taking the time to read this. Happy coding.

Regards,

The Thing


In C#3 (in VS 2008), you could set up a compile-time array using the array initializer syntax:

var buttons = new [] { button1, button2, ... button10 };

alternatively, you could reflect on all the fields and filter the buttons, along the lines of

using System.Linq;

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

This gets all the buttons -- you might want to add a Where(f => SomeTestOn(f.Name)) filter before the Select if you want to filter out those fields except with some known naming pattern indicating that they are the buttons you actually want.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜