Динамическое управление формой - PullRequest
8 голосов
/ 04 сентября 2008

Использование C # 2.0, каков наилучший способ реализации элементов управления динамической формы?

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

Ответы [ 5 ]

8 голосов
/ 04 сентября 2008

Вы можете использовать панели с автоматической разметкой, такие как FlowLayoutPanel и TableLayoutPanel .

К сожалению, есть только 2 панели с автоматическим макетом, но вы можете создать собственную панель макета.

Я бы порекомендовал вам прочитать следующие статьи:

Как: создать форму Windows с изменяемым размером для ввода данных

Пошаговое руководство. Создание формы Windows с изменяемым размером для ввода данных

Другим вариантом будет использование WPF (Windows Presentation Presentation).
WPF идеально подходит для вашей задачи.
Элементы управления WPF можно размещать в приложениях WinForms, поэтому вам не нужно полностью переключаться на них.

2 голосов
/ 04 сентября 2008

@ Сэм, я знаю, что этот вопрос был о Windows Forms, но вам определенно стоит начать смотреть на WPF. Такой сценарий действительно прост в WPF с DataTemplates и TemplateSelectors.

1 голос
/ 04 сентября 2008

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

Например, я использовал Reflection, чтобы сопоставить определенный тип элемента управления определенному свойству в моих объектах домена в более старом проекте.

Вы можете попробовать сгенерировать код из шаблонов, используя t4, см. Шаблоны T4 в Visual Studio для экрана генерации кода для простого примера. Вы можете применить это к WinForms.

Также у DevExperience есть хорошая (дорогая) платформа, см. DevExpress eXpressApp Framework ™ .

1 голос
/ 04 сентября 2008

Да, я нашел, что макеты элементов управления вручную (увеличивая их свойство Top на высоту элемента управления и добавляемое поле по мере необходимости) достаточно эффективны.

Другой подход заключается в размещении элементов управления в панелях с Dock, установленным в верхнее положение, так что каждая последующая панель стыкуется с вышеуказанной. Затем вы можете переключать видимость отдельных панелей, и расположенные внизу элементы управления защелкиваются, чтобы заполнить доступное пространство. Имейте в виду, что это может быть немного непредсказуемо: показ скрытой панели, которая закреплена, иногда может изменить ее положение относительно других закрепленных элементов управления.

1 голос
/ 04 сентября 2008

Что вы подразумеваете под «динамическим»? Новый, фиксированный набор элементов управления для каждой строки данных в наборе данных? Затем используйте UserControl, который содержит ваши элементы управления.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...