Комбинация поведения стыковки и привязки в winforms

Сегодня я пытаюсь использовать C # для последовательного размещения ряда элементов управления Windows на панели. Я хотел бы, чтобы они пристыковались к вершине, чтобы затем я мог использовать BringToFront (), чтобы сложить их.

ОДНАКО я бы хотел, чтобы они были сосредоточены. В настоящее время поведение стыковки заставляет элементы управления располагаться слева от экрана (как бы я ни менял размер и свойство местоположения)

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

Я изучал это много часов и не нашел ответов на этот вопрос. Можно ли использовать одно или оба этих свойства, чтобы расположить элементы управления в центре панели?

В настоящее время мой код выглядит так:

//Docking 
userControl.Dock = DockStyle.Top;
userControl.Width = 633;
userControl.Left = (pnlRules.Width - userControl.Width) / 2; //doesn't work
Point location = new Point(((pnlRules.Width - userControl.Width) / 2), 0);
userControl.Location = location; //doesn't work
userControl.BringToFront();

OR

//Anchoring
userControl.Anchor = AnchorStyles.Top;
Point location = new Point(((pnlRules.Width - userControl.Width) / 2), 0);
userControl.Location = location;
userControl.BringToFront(); //doesn't work

Мои выходы представляют собой либо сложенные элементы управления, привязанные к левому краю панели (закрепление), либо перекрывающиеся элементы управления с красивым изменением размера и центрированием (привязка)

Спасибо :) Аня

Изменить: эта подпись прекрасно описывает мою проблему: http://www.techrepublic.com/article/manage-winform-controls-using-the-anchor-and-dock-properties/

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


person Anya Hope    schedule 08.10.2014    source источник
comment
Проверьте TableLayoutPanel, в нем есть заклинания макета. Что касается BringToFront(), вместо того, чтобы иметь что-то позади, а затем вынести на передний план, вы можете сделать это невидимым (Visible = false) и правильно расположить, чтобы сделать это видимым будет правильно.   -  person Sinatr    schedule 08.10.2014
comment
Непонятно, что вы пытаетесь сделать. Если вы BringToFront элемент управления, а затем добавите новый поверх него, он не будет виден.   -  person γηράσκω δ' αεί πο    schedule 08.10.2014
comment
В настоящее время я использую BringToFront (), чтобы установить z-порядок моих элементов управления, я хочу, чтобы каждый элемент управления на странице был видимым - в виде списка элементов управления. Я добавляю элементы управления по одному, и мне нужно, чтобы они добавлялись в конец существующего списка.   -  person Anya Hope    schedule 08.10.2014
comment
Это не имеет смысла. Вы знаете, что такое z-порядок? Если вы сложите их друг на друга, по определению будут видны только самые верхние.   -  person DonBoitnott    schedule 08.10.2014
comment
Использование BringToFront () на пристыкованных элементах управления заставляет их выстраиваться, а не накладываться друг на друга. Я считаю, что z-порядок - правильный термин для этого. Пожалуйста, поправьте меня, если я ошибаюсь   -  person Anya Hope    schedule 08.10.2014
comment
Хорошо, я понял настоящую проблему здесь. Свойства привязки и закрепления являются взаимоисключающими. Как только вы используете один, другой сбрасывается по умолчанию. Проблема здесь в том, что якорь по умолчанию сверху, слева, поэтому все мои элементы управления прилегают к левой стене. Вопрос: как мне изменить значение привязки по умолчанию на none? (не найдено в режиме просмотра свойств)   -  person Anya Hope    schedule 08.10.2014


Ответы (1)


Невозможно использовать комбинацию стыковки и постановки на якорь. TableLayoutPanel, возможно, здесь работал, но я был привязан к простой Panel.

Исправление заключалось в использовании отступов для принудительного центрирования элемента управления:

userControl.Dock = DockStyle.Top;
pnlParent.Padding = new Padding((pnlParent.Width - userControl.Width) / 2, 0, 0, 0);
userControl.BringToFront();
person Anya Hope    schedule 08.10.2014