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