2009-05-03 4 views
3

Я добавляю несколько текстовых полей в форму динамически во время выполнения. Все работает отлично, то есть текстовые поля выравниваются, привязываются и автоматически изменяются до до тех пор, пока форма не будет максимальной. При максимизации формы текстовые поля добавляются в одно и то же место, в то время как форма была не максимизирована. Это вызывает несоосность текстовых полей.Использование свойства anchor с динамически добавленными элементами управления

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

EDIT:

Btw Я использую C#

EDIT:

Будет ли FlowLayoutPanel быть полезным здесь?

+0

Какую настройку привязки вы используете? Значение по умолчанию (Вверху слева) приведет к тому, что ваши элементы управления будут оставаться в одном и том же положении относительно левого верхнего края формы и оставаться одинаковыми по размеру независимо от формы. –

+0

Я использую Top | Right Anchor setting. Текстовые поля с настройками привязки, как верхние | левые, выравниваются правильно. – tijuthomas

+0

Итак, текстовые поля Top | Right отображаются в верхнем правом углу формы? Как вы хотите, чтобы эти текстовые поля располагались по мере изменения размера формы? –

ответ

0

Свойство Anchor указывает, какие границы должны контролироваться, чтобы они всегда находились на одинаковом расстоянии. Это может стать довольно запутанным, поэтому вы видите, что вещи сдвигаются, когда привязаны к правой границе.

Если вы хотите, чтобы отображение текстового поля оставалось неизменным относительно самого себя, я бы предложил установить панель с привязкой к панели и добавить текстовые поля в Panel. Координаты X и Y в ваших текстовых полях становятся относительно панели, поэтому гораздо проще выполнять компоновку, особенно когда местоположение панели неожиданно изменяется.

2

Это довольно старый вопрос, но, возможно, я могу ответить на него.

После прочтения всех ваших комментариев, я думаю, что я могу резюмировать свою проблему следующим образом:

  • Вы имеете форму на определенный размере и добавить некоторые элементы управления во время выполнения в определенном месте с якорем, установленного в Top | Right.
  • Если вы просто отобразите форму и пусть элементы управления отображаются, все работает нормально
  • Если вы максимизируете свою форму (или меняете ее размер), элементы управления больше не появятся в нужном месте.

Чтобы избавиться от этой проблемы, вы можете попробовать различные подходы:

  1. Используйте FlowLayoutPanel, позаботьтесь для FlowDirection и, возможно, просто создать все необходимые элементы управления заранее и просто переключать видимое состояние.
  2. Используйте правильные значения для местоположения вновь созданных элементов управления.

Второй момент - ошибка, которую вы имеете (я думаю). Вы нашли способ рассчитать местоположение вашего контроля, если ваша форма имеет оригинальный размер. Чтобы получить правильную позицию, если размер формы изменился (например, максимизирован), вам нужно учитывать несколько факторов.

  • Значения дельта от вашего размера по умолчанию до вашего текущего размера.
  • Якорь (-ы), который вы хотите установить под свой контроль.

В вашем случае, если вы хотели бы поставить контроль над которой привязано Top | Right, но место устанавливается Top | Left. В этом случае вам нужно вычислить разницу между control.location.x и формой. Width в его размере по умолчанию. Затем вы берете эту разницу и вычитаете ее из текущей ширины формы. Теперь вы можете разместить свой контроль в этом положении (потому что Top никогда не изменяется с помощью изменения размера). Если у вас есть Якорь в Bottom | Right, вам нужно рассчитать то же самое с control.location.y и form.height.

Поведение и расчет, если никакой якорь, для Top | Bottom или Left | Right, установлены в качестве упражнения для чтения. ;-)

Последнее, но не менее есть и другой Hacky способ получить контроль в правильном положении:

  • Если вы хотите поместить новый элемент управления где-то изменить Form.Visible к false
  • Сохранить форма состояние, размер и расположение
  • Изменить их в свои значения по умолчанию
  • Добавить элементы управления, которые вы хотите
  • Восстановление ранее сохраненные значения
  • Сделайте вид снова видимым.
Смежные вопросы