Как сделать расположение дочерних элементов управления в WinForms относительным?

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

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


person Gamadril    schedule 01.11.2010    source источник


Ответы (4)


Название вопроса и вопрос задают две разные вещи.

Для заголовка: да, вы можете сделать относительное размещение, но вам нужно будет использовать вложенные панели макета, такие как TableLayoutPanel и FlowLayoutPanel. Они должны быть в состоянии сделать большую часть, если не все, из того, что вы хотите сделать.

По собственно вопросу:

  1. Почему?
  2. Нет, ты не можешь.
person siride    schedule 01.11.2010

Я не уверен, что вы можете сделать это, используя свойство Location, без большого количества дополнительного кодирования. Но (1) вы можете установить для свойства «Якорь» значение «Справа и снизу» вместо «Сверху и слева». Затем каждый раз, когда вы изменяете размер формы, она остается в одном и том же месте относительно правого нижнего угла содержащей панели (формы). Затем (2) можно установить для вашего верхнего левого местоположения такие значения, что оно будет вне видимой области... поэтому каждый раз, когда ваша форма (или панель) изменяется, элемент управления останется вне видимой области.

Надеюсь, это поможет.

person David    schedule 01.11.2010

Вы можете сделать что-то вроде

Point relativePos = new Point(-10, -10);
control.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
control.Location = new Point(this.ClientSize.Width - control.Width + relativePos.X, this.ClientSize.Height - control.Height + relativePos.Y);

где относительное положение — это положение относительно правого нижнего угла. Якорь гарантирует, что он останется там при изменении размера.

person Doggett    schedule 01.11.2010

Я сделал небольшой класс для управления позицией и размером в зависимости от размера контейнера:

http://www.codeproject.com/Tips/492814/Relative-design-components-on-WinForm

person turbosqel    schedule 14.11.2012
comment
Спасибо, это выглядит многообещающе. Буду тестировать в своем проекте. - person Gamadril; 15.11.2012