




Что вы имеете в виду под «динамическим»? Новый фиксированный набор элементов управления для каждой строки данных в наборе данных? Затем используйте UserControl, который содержит ваши элементы управления.
Или вы имеете в виду, что в зависимости от макета данных вы хотите предоставить пользователю настраиваемый набор элементов управления, скажем, по одному TextBox для каждого столбца?
Да, я обнаружил, что элементы управления компоновкой вручную (увеличивая их свойство Top на высоту элемента управления плюс поле по мере продвижения) достаточно эффективны.
Другой подход - разместить элементы управления на панелях с Dock, установленным на Top, чтобы каждая последующая панель стыковалась с предыдущей. Затем вы можете переключать видимость отдельных панелей, и элементы управления под ними появятся, чтобы заполнить доступное пространство. Имейте в виду, что это может быть немного непредсказуемо: отображение закрепленной скрытой панели иногда может изменить ее положение относительно других закрепленных элементов управления.
Вы можете использовать панели с автоматической компоновкой, такие как FlowLayoutPanel и TableLayoutPanel.
К сожалению, есть только 2 панели с автоматическим макетом из коробки, но вы можете создать собственную панель макета.
Я бы порекомендовал вам прочитать следующие статьи:
Как: создать форму Windows с изменяемым размером для ввода данных
Пошаговое руководство: создание формы Windows с изменяемым размером для ввода данных
Другой вариант - использовать WPF (презентация Windows) .
WPF идеально подходит для вашей задачи.
Элементы управления WPF могут размещаться в приложениях WinForms, поэтому вам не нужно полностью переключаться на него.
Что ж, именно так мы и делаем это прямо сейчас над проектом. но это полезно только в простых случаях. Я предлагаю вам использовать какой-то шаблон для более сложных случаев.
Например, я использовал Reflection для сопоставления определенного типа элемента управления с определенным свойством в объектах моего домена в более старом проекте.
Вы можете попробовать сгенерировать код из шаблонов, используя t4, см. Шаблоны T4 в Visual Studio для создания кода. Скринкаст для простого примера. Вы можете применить это к WinForms.
Также у DevExperience есть хорошая (дорогая) структура, см. DevExpress eXpressApp Framework ™.
@Sam Я знаю, что этот вопрос касался Windows Forms, но вам обязательно стоит взглянуть на WPF. Этот вид сценария прост в использовании В самом деле в WPF с DataTemplates и TemplateSelectors.