Это довольно старый вопрос, но, возможно, я могу ответить на него.
После прочтения всех ваших комментариев, я думаю, что я могу резюмировать свою проблему следующим образом:
- Вы имеете форму на определенный размере и добавить некоторые элементы управления во время выполнения в определенном месте с якорем, установленного в
Top | Right
.
- Если вы просто отобразите форму и пусть элементы управления отображаются, все работает нормально
- Если вы максимизируете свою форму (или меняете ее размер), элементы управления больше не появятся в нужном месте.
Чтобы избавиться от этой проблемы, вы можете попробовать различные подходы:
- Используйте FlowLayoutPanel, позаботьтесь для FlowDirection и, возможно, просто создать все необходимые элементы управления заранее и просто переключать видимое состояние.
- Используйте правильные значения для местоположения вновь созданных элементов управления.
Второй момент - ошибка, которую вы имеете (я думаю). Вы нашли способ рассчитать местоположение вашего контроля, если ваша форма имеет оригинальный размер. Чтобы получить правильную позицию, если размер формы изменился (например, максимизирован), вам нужно учитывать несколько факторов.
- Значения дельта от вашего размера по умолчанию до вашего текущего размера.
- Якорь (-ы), который вы хотите установить под свой контроль.
В вашем случае, если вы хотели бы поставить контроль над которой привязано Top | Right
, но место устанавливается Top | Left
. В этом случае вам нужно вычислить разницу между control.location.x и формой. Width в его размере по умолчанию. Затем вы берете эту разницу и вычитаете ее из текущей ширины формы. Теперь вы можете разместить свой контроль в этом положении (потому что Top никогда не изменяется с помощью изменения размера). Если у вас есть Якорь в Bottom | Right
, вам нужно рассчитать то же самое с control.location.y и form.height.
Поведение и расчет, если никакой якорь, для Top | Bottom
или Left | Right
, установлены в качестве упражнения для чтения. ;-)
Последнее, но не менее есть и другой Hacky способ получить контроль в правильном положении:
- Если вы хотите поместить новый элемент управления где-то изменить
Form.Visible
к false
- Сохранить форма состояние, размер и расположение
- Изменить их в свои значения по умолчанию
- Добавить элементы управления, которые вы хотите
- Восстановление ранее сохраненные значения
- Сделайте вид снова видимым.
Какую настройку привязки вы используете? Значение по умолчанию (Вверху слева) приведет к тому, что ваши элементы управления будут оставаться в одном и том же положении относительно левого верхнего края формы и оставаться одинаковыми по размеру независимо от формы. –
Я использую Top | Right Anchor setting. Текстовые поля с настройками привязки, как верхние | левые, выравниваются правильно. – tijuthomas
Итак, текстовые поля Top | Right отображаются в верхнем правом углу формы? Как вы хотите, чтобы эти текстовые поля располагались по мере изменения размера формы? –