C # - заполнить структуру данных во время выполнения ссылками на кнопки, добавленные в TableLayoutPanel во время разработки - PullRequest
0 голосов
/ 12 ноября 2009

Я использую Visual C # 2008 Express Edition.

Если во время разработки у меня есть форма [myMainForm],
к которому я добавил TabControl [myTabControl],
и myTabControl имеет одну вкладку [myTabPage],
и к этой вкладке я добавил tableLayoutPanel [myTableLayoutPanel],
и к myTablelayoutPanel я добавил десять кнопок (button1, button2, button3 и т. д.).

Во время выполнения я хочу заполнить структуру данных ссылками на все десять кнопок, которые я добавил в myTableLayoutPanel. Я хочу работать со ссылками на кнопки самым простым и эффективным способом. Является ли цикл for ... next в сочетании с массивом лучшим подходом для решения проблемы?

Я понимаю, что могу программно добавлять кнопки на панель, но если я сделаю это, мне придется также настроить их визуальные настройки в коде, чего я бы предпочел избежать, чтобы сделать мой код максимально чистым и простым .

Если бы кто-то мог опубликовать несколько строк кода, чтобы я продолжил это, я был бы благодарен.

Спасибо, что нашли время, чтобы прочитать это. Удачного кодирования.

С уважением,

Вещь

1 Ответ

1 голос
/ 12 ноября 2009

В 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)) перед Select, если вы хотите отфильтровать эти поля, за исключением некоторого известного шаблона именования, указывающего, что это те кнопки, которые вам действительно нужны.

...