2013-04-11 4 views
0

Я пытаюсь создать пользовательский элемент управления в C# /. NET 4.0/WinForms, который будет содержать два (или более) GroupBox элементов, расположенных друг над другом, сначала касаясь верхней границы моего пользовательского элемента управления, в то время как последний затрагивает нижнюю строку ,Как сделать два групповых окна одинаковой высоты?

Я бы также хотел, чтобы высота этих GroupBox элементов была одинаковой, и вдобавок к этому (теперь это кажется трудной частью), все это должно работать безупречно, когда пользователь меняет высоту окно приложения. До сих пор мне не удалось найти какую-либо комбинацию свойства Anchor, которое выполнило бы именно это, поэтому я начинаю думать, что писать пользовательский обработчик изменения размера будет единственным вариантом, но прежде чем я вникаю в такие (на мой взгляд) грязные решение, мне было интересно, есть ли простой способ создать пользовательский элемент управления, который бы соответствовал моему описанию?

Here является иллюстрацией того, что я хочу сделать, here это то, что произойдет, если верхний GroupBox имеет Top и LeftAnchor и нижняя имеет Top, Bottom и Left и окно приложения получает немного изменен (внизу один берет на себя все дополнительные вместо того, чтобы оба GroupBoxes делились им одинаково) и, наконец, here - это то, что произойдет, если я использую свойства из предыдущего примера, но добавлю BottomAnchor в верхний GroupBox.

Заранее благодарен!

ответ

2

Вы можете позволить своему контейнеру выполнить некоторую работу, то есть использовать TableLayoutPanel, поскольку контейнер устанавливает его для 2 строк и 1 столбца и устанавливает свойство Dock для заполнения, тогда вы можете добавить свой GroupBoxes в каждую из ячеек TableLayoutPanel также устанавливают режим Dock Mode для заполнения, возможно, вы установите положение любых дочерних элементов управления в Groupbox, потому что если вы установите привязку якорей, это повлияет на размер элемента управления. Поиграйте с ним и посмотрите, работает ли он на вас.

+1

+1, потому что для сложных макетов TableLayoutPanel - лучший способ пойти, просто больше работы по настройке! – FastGeek

+0

Блестящий! Вы только что спасли мой день, я не знал о существовании 'TableLayoutPanel'. Большое спасибо! – Cellane

2

Это вовсе не грязное решение для добавления кода в обработчик событий SizeChanged для обеспечения того, чтобы элементы макета отображались так, как должны - это то, что каждый разработчик пользовательских интерфейсов WinFroms должен будет сделать в какой-то момент!

Решение прост, установите якоря в соответствии с вашей моделью изменения размера и другими элементами управления пользовательского интерфейса, а затем просто получите свойство Height для элемента управления, разделите его на 2, удалите фигуру для учета полей и затем назначьте полученную фигуру к свойству height каждого GroupBox.

+0

Это не так? Ой! Я почему-то почувствовал, что это то, что я не должен касаться, и позволить магии справиться с этим. Приветствия для ответа тогда! :-) – Cellane

Смежные вопросы