Хорошо, я думаю, что нашел очень элегантное решение для этого.
Я обнаружил очень изящный элемент управления, называемый FlowLayoutPanel . Это автоматически выровняет все элементы управления внутри него по верхнему левому углу по умолчанию. Элементы управления будут автоматически настраиваться, когда другие элементы управления будут скрыты или станут видимыми. Это именно то, что я искал.
Однако я столкнулся с проблемами, когда захотел добавить, например, Label и TextEdit. Label и TextEdit оба следовали за потоком, вместо того, чтобы Label находился поверх TextEdit. Для метки есть свойство, которое вы можете включить или выключить в зависимости от того, должно ли оно нарушать поток. Я занимался этим до тех пор, пока не стало очевидно, что будет болезненно скрывать и показывать как Метку, так и TextEdit, к которому идет Метка, когда мне нужно было переключать различные состояния формы. (каждое состояние должно отображать или скрывать различный выбор доступных полей ввода)
Итак, я создал общий пользовательский элемент управления с двумя панелями, прикрепленными к обеим, чтобы они соответствующим образом изменили размеры. Верхняя панель содержит элемент управления Label. В этом базовом пользовательском элементе управления с меткой я создал открытое свойство для редактирования текста метки. Затем, чтобы приспособиться к различным типам ввода формы, я создал несколько пользовательских элементов управления, которые наследуются от базового элемента управления с меткой. В эти дочерние элементы управления я поместил необходимые поля ввода - TextEdit, ComboEdit, DateEdit и т. Д. Каждый дочерний элемент управления имеет открытые свойства для получения и установки значений в соответствующих элементах управления вводом.
Теперь это так же просто, как добавить множество различных пользовательских элементов управления «LabeledField», которые я сделал, в FlowLayoutPanel, и они корректируются по назначению. Теперь я могу показать или скрыть только те, которые мне нужны, и я не повторяю код для всех различных состояний формы! Это похоже на предложение Дениса Биондика, за исключением того, что я использую не форму, а пользовательский элемент управления. Я не думаю, что лично рекомендую для этого использовать форму, поэтому я даю свой собственный ответ.